2016-09-19 127 views
0

所以,我想創建一個小背景。我正在嘗試構建一個投票應用程序,其中MongoDb數據庫存儲了每個選項的選項和計數器,以檢查人們爲每個選項投了多少次票。我已經實現的數據結構如下所示。如何使用變量字段名稱來增加mongodb字段?

_id:"57dfecfa3832360f46e183c2" 
options:"iea, aoegboae, aoeugoa, ougr, gege" 
options_counter:Object 
0:0 
1:0 
2:0 
3:0 
4:0 
__proto__:Object 
title:"hr" 

每個這些數字[0,1,2,3,4]的代表一個選項,數結腸表示每個計數器之後。我的功能更新所需的反如下所示

var fieldToIncrement = db.collection('polls').options_counter.field; 
     db.collection('polls').findOneAndUpdate(
      {_id: user_id}, 
      {$inc: {fieldToIncrement: 1}}, 
      {upsert:false}, 
      {returnNewDocument: true} 
     ).toArray(function(err, doc){ 
      if(err){ 
       throw new Error(err); 
      }if(doc){ 
       console.log(doc); 
       //callback(null, doc); 
      } 
     }); 

然而,使用fieldToIncrement變量返回一個錯誤,指出無法找到的未定義的屬性字段。變量字段包含指定需要遞增1的options_counter對象的特定鍵的數字。我已將options_counter嵌入原始文檔中。我的問題是如何設置語法,以便MongoDb可以找到options_counter對象內的特定鍵值對來更新,並將該計數器增加1?

+0

有幾個問題,但從調用'console.log(fieldToIncrement)'開始顯示其值。這可能不是你的想法。 – JohnnyHK

+0

因此,當我使用上述語法來定義fieldToIncrement時,它會返回一個錯誤,因爲我顯然試圖訪問未定義對象的屬性。我試着將它改爲options_counter.field,但也返回一個錯誤,因爲options_counter不能在數據庫之外訪問。你看到的其他錯誤是什麼? –

回答

1

它看起來像「options_counter」是一個嵌入式文檔,因此您var var fieldToIncrement必須是類似options_count.0。 我在你的問題中看不到這個。

請分享你的代碼,在你定義fieldToIncrement的地方,現在看起來沒有定義,同樣在你提到的錯誤中聲明:「但是,使用fieldToIncrement變量返回一個錯誤,說找不到未定義的屬性字段。

+0

我在第二塊代碼的第一行中定義了它。 var fieldToIncrement = db.collection('polls')。options_counter.field; 我嘗試了你的建議方法,但是也返回一個錯誤,因爲options_counter只能在db.collection函數內部訪問 –

+1

你必須把它改成類似於:var fieldToIncrement = {$ inc:{options_counter.0:1}} 。在更新中使用該變量而不是{inc .....}行。 – HoefMeistert

+0

所以,我做到了。但是,它似乎對文檔沒有任何影響。文檔確實返回,但沒有看到更新的效果。 –

相關問題