推送后获取索引

时间:2011-12-08 06:29:20

标签: mongodb push

如何在使用$push修饰符将新值推入数组后获取新索引?

例如,我在doc中有一个数组,

{ ...
    'myarray': [1, 2, 3]
 ....
}

myarray中推送数字10之后,希望得到索引编号3。

我在考虑使用count方法,但认为它不是原子的。

1 个答案:

答案 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) - 处理此情况取决于您的应用程序。