2014-04-29 16 views
-1

我有这个问题:我想通过代码获取下一个序列号,但它总是说“未定义”。从mongodb allways得到sequnce号码undefined

任何帮助将是炉排:)

我以前做这在我的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; 
} 

回答

0

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

+0

0123对不起,我想我的语法错误,你能写一些有用的东西吗? – eran10

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; 
}