2014-10-02 52 views
2

工作,我想使用findAndModify與node.js的MongoDB的模塊monk。這是我使用的方法,這將引發一個500錯誤在我cmdMongoDB的findAndModify不是和尚

notesCollection.findAndModify({_id:_id},[],{_id:_id,title:title,content:content},{'new':true,'upsert':true},function(err,doc){ 
    if(err) 
     console.error(err); 
    else 
    { 
     console.log("Find and modify successfull"); 
     console.dir(doc); 
    } 
}); 

I obtained the method signature here 。我得看起來像這樣,是無信息的錯誤:

POST /notes/edit/542bdec5712c0dc426d41342 500 86ms - 1.35kb 

回答

3

僧實現了更符合針對方法簽名的shell語法線比由節點本地驅動器提供的方法河因此,在這種情況下.findAndModify()的「殼」的文檔更適合在這裏:

notescollection.findAndModify(
     { 
     "query": { "_id": id }, 
     "update": { "$set": { 
      "title": title, 
      "content": content 
     }}, 
     "options": { "new": true, "upsert": true } 
     }, 
     function(err,doc) { 
     if (err) throw err; 
     console.log(doc); 
     } 
); 

還注意到,你應該使用$set運營商或posibly甚至$setOnInsert操作,你只需要在文檔應用領域創建。當這樣的運營商應用而不是時,則「整個」文檔將替換爲您爲「更新」指定的任何內容。

您也不需要在更新部分提供「_id」字段,因爲即使發生「upsert」,也會暗示在語句的「查詢」部分中出現的任何內容暗示將在新的文件。

修士文檔還提示用於method signature的正確語法。

0

有同樣的問題,即使我喜歡它,但接受的答案不適合我。

這是不夠清晰,但文件暗示了正確的語法,開始與signatures

  • 所有命令接受簡單data[, …], fn。例如
    • findAndModify({}, {}, fn)

而且從finding section

users.findAndModify({ _id: '' }, { $set: {} });

最後,簽名部分繼續:

  • 您可以通過選擇在中間:data[, …], options, fn

全部放在一起:

collection.findAndModify({ 
    _id: '', 
}, { 
    $set: { 
     value: '', 
    }, 
}, { 
    upsert: true, 
}); 

因此,在這種情況下,data[, …]是夫妻{}, {}對象:查詢並更新。然後,您可以將回調作爲第四個參數添加到我的代碼段中。

相關問題