2014-10-28 71 views
1

我正在學習Meteor,我很難理解MongoDB。我有一個集合稱爲菜單,看起來像這樣:將對象插入Meteor MongoDB中的多維數組

 
    id:123, 
    cat:'starters', 
     details:{[ 
     item:'nachos', 
     price:'3.99', 
     desc:'chips & queso' 
     ]} 

我想另一個項目是集合添加到平等:

 
    id:123, 
    cat:'starters', 
    details:{[ 
     item:'nachos', 
     price:'3.99', 
     desc:'chips & queso' 
    ],[ 
     item:'calamari', 
     price:'4.99', 
     desc:'fried calamari' 
]} 

我的代碼如下所示:

Menu.upsert({_id:'123'},{$push:{details:[{item:'calamari'},{price:'4.99'},{desc:'fried calamari'}]}}); 

我也嘗試使用「更新」,但我只是得到一個「無法應用$ push修飾符到非數組」的錯誤。

UPDATE 謝謝Sindis,你是對的,我能夠得到這個工作。

我做了一個叫做Menu2的新集合。

 
    id:54, 
    cat:'starters, 
    details:[{ 
     item:'nachos' 
     price:'3.99' 
     }] 

然後使用 「更新」 的建議:

Menu2.update({id:'54'},{$push:{details:{item:'calamari',price:'4.99'}}}); 

而且我得到了這個!

 
    id:54, 
    cat:'starters', 
    details:[{ 
     item:'nachos', 
     price:'3.99' 
    },{ 
     item:'calamari', 
     price:'2.99' 
    }] 

回答

0

未經測試,但我認爲它應該看起來更像是這樣的:

Menu.upsert({_id:'123'},{$push: {details: {item:'calamari', price:'4.99', desc:'fried calamari'}}}); 

你推不需要通過一個對象,並更新/更新插入周圍物體的各個部分已經期待一個進入數組的對象,所以不需要方括號。

http://docs.mongodb.org/manual/reference/operator/update/push/

+0

然而,感謝您的回答;仍然沒有運氣,我得到同樣的錯誤。 – user3280456 2014-10-28 17:38:43

+1

要做到這一點,細節的定義必須是[],而不是{}。所以第一張唱片應該是這樣的:''細節:[{item:'nachos', price:'3.99', desc:'chips&queso' }]'。現在您創建了一個數組,並且您可以在其中推入對象,{}僅僅是Mongo中的一個對象,如果我正確的話。哦,還有,嘗試更新它,而不是插件。 – Sindis 2014-10-28 18:49:07