У меня возникают проблемы при запросе на один из моих документов внутри базы данных через Meteor.Mongo Document Increment Sequence пропускает числа
Используя эту строку кода, я пытаюсь получить следующий порядковый номер из БД. Но по какой-то причине он иногда пропускает числа случайным образом.
var col = MyCounters.findOne(type);
MyCounters.update(col._id, {$inc: {seq: 1}});
return col.seq;
Не получает никаких ошибок на стороне сервера. Кто-нибудь знает, в чем проблема?
Я на Метеоре 1.4+
====================
Update
Я также обновить другую коллекцию с новое значение, полученное из MyCounters
коллекции, так что это будет что-то вроде этого:
var col = MyCounters.findOne(type);
MyCounters.update(col._id, {$inc: {seq: 1}});
var barId = col.seq;
// declare barObject + onInsertError
barObject.barId = barId;
// ...
FooCollection.insert(barObject, onInsertError);
И FooCollection заканчивается Пропустив порядковые номера до 5000 иногда.
Является ли этот код работает в качестве помощника? Я предполагаю, что вы намерены вернуть значение последовательности * до * обновления? –
Чтобы понять, почему этот код пропускает числа, вам нужно будет описать, как вы его используете (например, в цикле, в обработчике запросов и т. Д.). В частности, было бы интересно, если он будет вызываться одновременно, поскольку он не является атомарным и, следовательно, подвержен условиям гонки. –
@FlorianWinter Код внутри метода Метеор, который вызывается перед вставкой в другой, чтобы поместить значение в качестве одного из его атрибутов. Я думал, что это могло быть условие гонки, и добавило несколько журналов и отлаживало его, чтобы увидеть, есть ли какие-либо ошибки между вызовом последовательности и вставкой документа для пропущенных номеров, но они не были. – Rob