2012-03-11 110 views
1

我使用MongoDB的我site.When我嘗試運行「findAndModify」功能,我總是那個文件夾是「未定義」:使用「findAndModify」有關MongoDB

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

    return doc.next; 
} 

問:我在想什麼?

+0

什麼版本的MongoDB是您目前以怎樣的驅動程序運行?如果你通過shell來試試這個,你的結果是什麼? – Bill 2012-03-11 14:17:02

+0

我使用2.0.3。如果我檢查殼體,它的工作原理 – user541847 2012-03-12 15:36:20

回答

1

你沒有錯過任何東西,upsert等於true findAndModify應該總是返回文檔..即使沒有匹配的查詢。

但是,分割和findAndModify存在侷限性 - 您的查詢應該始終包含分片鍵,mb這是一個問題。

此命令也適用於版本> = 1.3的mongodb。如果您使用舊的mongodb,只需將其更新到最新版本(2.0.3),它應該可以工作。 (我測試過1.8和2.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); 
    }); 
-3

打破我的頭相當長的一段時間後,我有點更改爲1,並工作.....

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

請解釋如何解決問題中描述的問題。 – nabinca 2015-09-24 18:34:58