2016-09-19 65 views
0

我有以下代碼來查找和更新MongoDb中嵌入文檔的字段。findOneAndUpdate不返回MongoDb中的更新文檔

var fieldToIncrement = { $inc: {} }; 
     fieldToIncrement.$inc['options_counter.'+field[0]] = 1; 
     console.log(fieldToIncrement); 

     db.collection('polls').findOneAndUpdate(
      {_id: user_id}, 
      fieldToIncrement, 
      { 
       returnNewDocument: true 
      }, function(err, doc){ 
       if(err){console.log("Error updating the document")}; 
       if(doc){ 
        callback(doc); 
       } 
      } 
     ) 

我的數據結構看起來像這樣

_id:"57e0149dcb0b20156878598d" 
options:"osgn, srgounsrog, snourv" 
options_counter:Object 
0:0 
1:0 
2:0 

在代碼中的變量字段是包含一個元件,其引用的數組其中options_counter對象的字段我想要更新。但是,該文檔在沒有任何更新的情況下返回,也不會返回任何錯誤。我試圖改變

fieldToIncrement.$inc['options_counter.'+field[0]] = 1; 

fieldToIncrement.$inc['opt_counter.'+field[0]] = 1; 

,它仍然不返回一個錯誤。這意味着我不是 正確實施代碼,因爲opt_counter不是 我的文檔中的字段,因此它應該返回一個錯誤。

回答

0

它不會返回,當你把它在錯誤的領域並不存在,$ Inc.將創造與價值爲0,該名稱的字段,然後增加一個錯誤,由1

更新調用後,如果你的字段值沒有改變(即使有一個錯誤的字段),也許你需要用find({_ id:user_id})來調用查詢並查看它是否返回數據,有時我們將_id存儲爲ObjectId並通過String值進行查詢,並且由於類型不匹配而不選擇文檔。