1
如何使用$push
修饰符将新索引推入数组?推后获取索引
例如,我有一个文档的数组,
{ ...
'myarray': [1, 2, 3]
....
}
推后说,在myarray
10号,希望得到索引号3
我想使用count
方法,但认为它不会是原子的。
如何使用$push
修饰符将新索引推入数组?推后获取索引
例如,我有一个文档的数组,
{ ...
'myarray': [1, 2, 3]
....
}
推后说,在myarray
10号,希望得到索引号3
我想使用count
方法,但认为它不会是原子的。
它不会是原子的。做这样的事情的最好方法是使用findAndModify:
http://www.mongodb.org/display/DOCS/findAndModify+Command
下面是将原子应用$推进更新并返回结果文档的例子。请注意,findAndModify调用返回应用了推送的“新”文档。这是原子。
MongoDB shell version: 2.1.0
connecting to: test
> db.z.save({"a":[], "name": "list1"})
> db.runCommand({ "findAndModify": "z", "query": { "name": "list1" }, "update": { "$push": { "a": 64 } }, "new": true })
{
"lastErrorObject" : {
"updatedExisting" : true,
"n" : 1,
"connectionId" : 65,
"err" : null,
"ok" : 1
},
"value" : {
"_id" : ObjectId("4ee27202c469f4b2d3c6cbf9"),
"a" : [
64
],
"name" : "list1"
},
"ok" : 1
}
> db.z.find()
{ "_id" : ObjectId("4ee27202c469f4b2d3c6cbf9"), "a" : [ 64 ], "name" : "list1" }
然后,您将计算客户端代码中的索引。请注意,后续操作可能会导致此索引无效(即后续移除,$ set或$ pull) - 处理此案例取决于您的应用程序。
数组的所有元素都是唯一的还是可以重复的? –
可以是唯一的或重复的。 – bxx