2014-01-30 134 views
2

我使用Meteor在那裏我有哪裏的東西插入下面的代碼MongoDB的文檔:在mongodb中插入嵌套數組?

Poll_Coll.insert({question:quest,option1:[{pd:op1,ids:[]}], 
     option2:[{pd:op2,ids:[]}], 
     option3:[{pd:op3,ids:[]}], 
     option4:[{pd:op4,ids:[]}]}); 

我想option1.ids數組,我試圖做這樣的更新多個ID:

Polls_Coll.update({_id:"xxxx","option1.pd":"xxx"},{$push:{"option1.$.ids":6}}); 
Polls_Coll.update({_id:"xxxxx","option1.pd":"xxx"},{$push:{"option1.$.ids":{id:"ya"}}}); 

option1.pd工作正常。我嘗試了上述兩個命令,並得到錯誤

Error: MinimongoError: can't append to array using string field name [$] [409]

如何插入該ID字段?

回答

3

問題出在流星使用minimongo實現,因爲它目前不支持位置$運算符。

從操作在蒙戈工作如下的數據樣本殼

{ 
    "_id" : ObjectId("52eb0a6542b2498fd49f4f28"), 
    "question" : "quest", 
    "option1" : [ 
      { 
        "pd" : "op1", 
        "ids" : [ ] 
      }, 
      { 
        "pd" : "op7", 
        "ids" : [ ] 
      } 
    ], 
    "option2" : [ 
      { 
        "pd" : "op2", 
        "ids" : [ ] 
      } 
    ], 
    "option3" : [ 
      { 
        "pd" : "op3", 
        "ids" : [ ] 
      } 
    ], 
    "option4" : [ 
      { 
        "pd" : "op4", 
        "ids" : [ ] 
      } 
    ] 
} 

應用下面的語句將推動值到匹配元件的「IDS」數組。

db.poll.update({"option1.pd": "op1"},{$push: { "option1.$.ids": 6 }}) 

基本上相同的代碼也可以在服務器端工作。

似乎解決方案是將此更新包裝在可從客戶端調用並在服務器上執行代碼的函數調用中。

這裏有一些鏈接,確認問題:

https://github.com/meteor/meteor/issues/153

https://github.com/meteor/meteor/blob/master/packages/minimongo/NOTES

+0

這是如何我插入集「Polls_Coll.insert({問題:任務, \t \t \t \t選項1:[{pd:op1,ids:[]}], \t \t \t \t \t選項2:[{PD:OP2,IDS:[]}], \t \t \t \t \t選項3:[{PD:OP3,IDS:[]}], \t \t \t \t \t選項4:[{PD:OP4 ,ids:[]}] \t \t \t \t \t});''這是我試圖更新代碼Polls_Coll.update({_ id:this._id},{$ push:{'option1。$。ids':'hooya'}});我在瀏覽器控制檯嘗試了這一點,這也不工作Polls_Coll.update({_ id:「soeg9ezkMwKFmdPkT」,「option1.pd」:「android」},{$ push:{「option1。$。ids」:6}})將此集合聲明在js文件的頂部,並從服務器端 – Sasikanth

+0

發佈並訂閱到客戶端。現在我試圖在控制檯Polls_Coll.update({_ id:「soeg9ezkMwKFmdPkT」,「option1.pd」:「android」},{$ push:{「option1。$。ids」:6}})現在它顯示錯誤錯誤:不允許。不受信任的代碼只能通過ID更新文檔。 [403]雖然我給了身份證。感謝您的幫助 – Sasikanth

+0

是的,這將是問題。更新了關於答案和你的問題的說明,以澄清這是一個與minimongo相關的Meteor問題。您將無法對此數據使用透明的「更新」方法,並需要彙總更傳統的RPC調用。 –