2012-03-03 52 views
2

要更新蒙戈陣列的元件,我使用的語法,如:更新蒙戈陣列元件由索引與c-驅動

{"$set":{"a.0":1238},{"a.1":402}} 

或者,更準確地,我用的是C-驅動函數調用我認爲等同於此。這似乎很好地工作,但是當我看到在MongoHub對象,我看到:的

a: {"0":1238,"1":402} 

代替:

a: [1238,402] 

有誰知道什麼是正確的語法按索引與訪問數組元素C-驅動程序?我現在所做的是服務於我的直接目的,但我不確定是否存在顯着的性能差異。另外,我可能以後需要使用需要真正數組的操作。

+0

可能是錯的,但你嘗試過類似語法'{ 「$集」:{ 「一」:{1238,402}}}' – Hank 2012-03-03 03:14:47

+1

@Hank:這是無效的語法。 – 2012-03-03 03:19:12

回答

4

如果一個字段不存在,那麼這個點符號查詢會將它創建爲一個散列(對象)並將值分配給該散列的鍵。如果字段存在並且是一個數組,它將按照您的預期行事。看到這個會議。

> db.arrays.insert({}); 
> db.arrays.find(); 
{ "_id" : ObjectId("4f518c8b58713e4dbadbfb9f") } 
> db.arrays.update({ "_id" : ObjectId("4f518c8b58713e4dbadbfb9f") }, {$set: {"a.0": 123}}); 
> db.arrays.find(); 
{ "_id" : ObjectId("4f518c8b58713e4dbadbfb9f"), "a" : { "0" : 123 } } 


> db.arrays.insert({a: []}) 
> db.arrays.find(); 
{ "_id" : ObjectId("4f518c8b58713e4dbadbfb9f"), "a" : { "0" : 123 } } 
{ "_id" : ObjectId("4f518cca58713e4dbadbfba0"), "a" : [ ] } 
> db.arrays.update({ "_id" : ObjectId("4f518cca58713e4dbadbfba0") }, {$set: {"a.0": 123}}); 
> db.arrays.find(); 
{ "_id" : ObjectId("4f518c8b58713e4dbadbfb9f"), "a" : { "0" : 123 } } 
{ "_id" : ObjectId("4f518cca58713e4dbadbfba0"), "a" : [ 123 ] } 
+0

謝謝,這工作。只要我使用顯式數組語法來初始化字段,那麼後續更新就可以工作。 – user1055568 2012-03-04 17:38:04