Получение порядкового номера из mongodb всегда неопределено
Я пытаюсь получить по коду следующий порядковый номер, но он всегда говорит "неопределенный".
Я делал это в моем mongoDB раньше:
db.PresentationCollection.insert(
{
_id: "editorID",
seq: 0
}
)
мой код (имя EditorID):
function getNextSequence(name, db) {
var collection = db.get('PresentationCollection');
var ret = collection.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true
}
);
return ret.seq;
}
2 ответа
Вы пропускаете обратный звонок. Основанные на обратном вызове асинхронные функции обычно не возвращают ничего значимого. См. Документацию для findAndModify в файле readme привязки узла.
У меня возникла та же проблема при переходе по этой ссылке, и это действительно не обратный вызов, и ваш код не ждет возвращаемого результата - документы mongo db создают автоинкремент
Вот что я сделал, чтобы решить это. Имейте в виду, что я использую Q для помощи обещаниям, но вы можете использовать прямые обещания JavaScript.
function _getNextSequence(name) {
var deferred = Q.defer();
db.counters.findAndModify(
{ _id: name }, //query
[], //sort
{ $inc: { seq: 1 } }, //update
{ new:true }, //options
function(err, doc) { //callback
if (err) deferred.reject(err.name + ': ' + err.message);
if (doc){
deferred.resolve(doc.value.seq);
}
});
return deferred.promise;
}