从mongodb获取序列号始终未定义

时间:2014-04-29 18:41:06

标签: node.js mongodb seq

我试图通过代码获取下一个序列号,但它总是说“未定义”。

我之前在我的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 个答案:

答案 0 :(得分:0)

你错过了回调。基于回调的异步函数通常不会返回任何有意义的内容。请参阅节点绑定自述文件中的findAndModify文档。

答案 1 :(得分:0)

我在遵循此链接时遇到了同样的问题,确实没有指定回调,而且您的代码没有等待返回的结果 - mongo db documents create auto increment

以下是我要解决的问题。请记住,我使用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;
}