使用mongodb在一个db调用中执行两个不同的操作(3.4)

使用mongodb在一个db调用中执行两个不同的操作(3.4),mongodb,Mongodb,我有一个对象看起来像: { "personId": "134698", "name": "john", "age": 30, "contacts": [ { "name": "mark", "email": "mark@gmail.com" }, { "name": "maria", "email": "mari

我有一个对象看起来像:

{
    "personId": "134698",
    "name": "john",
    "age": 30,
    "contacts": 
    [
        {
            "name": "mark",
            "email": "mark@gmail.com"
        },
        {
            "name": "maria",
            "email": "maria@gmail.com"
        }
    ],
    "lastEdited": "2017-01-01"
}
我想更新并添加新联系人,所以我在做:

db.people.findAndModify({
    query: { "personId": "134698" },
    update: {"$push":{"contacts":{"name":"john","email":"john@gmail.com","phoneNumber":"9384608374"}}}
})
问题是,我想在推送新联系人后设置“lastEdited”,我可以在同一次呼叫中使用它,还是必须进行另一次db呼叫

我正在使用mongo 3.4,目前无法升级,我知道没有任何交易,所以如果我需要两次呼叫,这会很烦人,因为我需要在这里保护自己


这里有什么建议吗?

只需添加$set即可更新:

db.col1.findAndModify({
    query: { "personId": "134698" },
    update: {"$addToSet":{"contacts":{"name":"john2","email":"john@gmail.com","phoneNumber":"9384608374"}},"$set":{"lastEdited" : new Date()}}
})

更新:{$push:{…},$set:{…}
这对我不起作用……
{$push:{“联系人”:{“姓名”:“约翰”,“电子邮件”:john@gmail.com“,“phoneNumber”:“9384608374”},“$set”:{“lastEdited”:“2018-12-07”}}
为什么不呢?有错误吗?@AlexBlex它不起作用:/im得到“null”@JohnBigs,你能分享一个链接,在那里你读到关于db锁的内容吗?明确说明它锁定单个文档。与更新相同。区别只是findAndModify返回文档,update返回操作的结果。现在我的问题是,如果addToSet成功而set没有。。。?反之亦然,我应该怎么做呢?如果部分更新失败,那么更新失败,所以什么也不保存