使用c-driver通过索引更新mongo数组元素

时间:2012-03-03 01:44:21

标签: mongodb

要更新mongo数组的元素,我使用的语法如下:

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

或者,更确切地说,我正在使用我认为相当的C驱动程序函数调用。这似乎工作正常,但当我看到MongoHub中的对象时,我看到:

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

而不是:

a: [1238,402]

有没有人知道用C-driver索引访问数组元素的正确语法是什么?我现在正在做的事情是我的直接目的,但我不确定是否存在重大的性能差异。此外,我稍后可能需要使用需要真正数组的操作。

1 个答案:

答案 0 :(得分:5)

如果字段不存在,则此点符号查询将其创建为哈希(对象)并将值分配给该哈希的键。如果字段存在且是一个数组,它将按预期运行。见本节。

> 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 ] }