如何在使用$push
修饰符将新值推入数组后获取新索引?
例如,我在doc中有一个数组,
{ ...
'myarray': [1, 2, 3]
....
}
在myarray
中推送数字10之后,希望得到索引编号3。
我在考虑使用count
方法,但认为它不是原子的。
答案 0 :(得分:1)
这不是原子的。做这样的事情的最好方法是使用findAndModify:
http://www.mongodb.org/display/DOCS/findAndModify+Command
这是一个以原子方式应用$ push更新并返回结果文档的示例。请注意,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) - 处理此情况取决于您的应用程序。