Получение порядкового номера из 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;
}
Другие вопросы по тегам