使用' findAndModify'在mongodb

时间:2012-03-11 10:32:57

标签: mongodb

我在我的网站上使用mongodb。当我尝试运行“findAndModify”函数时,我总是得到那个文档'未定义':

function counter(name) {
    var doc = this.db.collection('counter').findAndModify(
                { query: { _id: name }, 
                  update: { $inc: { next: 1} }, 
                  new: true, 
                  upsert: true });

    return doc.next;
}

问:我缺少什么?

3 个答案:

答案 0 :(得分:2)

我试图从MongoDB文档中实现相同的计数器示例代码时遇到此问题。

如果您正在使用mongojs驱动程序,则需要使用回调,因为该函数不会返回任何内容:

this.db.collection('counter').findAndModify({
    query: { _id: name }, 
    update: { $inc: { next: 1} }, 
    new: true, 
    upsert: true 
    },
    function(err, doc){
        console.log('the id is: '+doc.next);
    });

答案 1 :(得分:1)

你没有错过任何东西,upsert等于true,findAndModify应该总是返回文件..即使没有匹配的查询。

但是,分片和findAndModify存在限制 - 您的查询应始终包含分片键,mb这是一个问题。

此命令也适用于版本> gt = 1.3的mongodb。如果您使用旧的mongodb,只需将其更新到最新版本(2.0.3),它应该可以工作。 (我在1.8和2.0上测试过)

答案 2 :(得分:-3)

在打破我的头很长一段时间之后,我将排序改为1并且它起作用了.....

counters.findAndModify({ _id: { $eq: "virtualcurrency" } }, { '_id': 1 }, { $inc: { seq: 1 } }, { new: true }, function (err, result) {