首页 > 解决方案 > 使用 mongodb (3.4) 在一个数据库调用中执行两个不同的操作

问题描述

我有一个看起来像的对象:

{
    "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”,我可以在同一个通话中使用它还是必须进行另一个数据库通话?

我正在使用 mongo 3.4 并且目前无法升级,而且我知道没有交易,所以如果我需要两次调用它,这很烦人,我需要在这里保护自己......

这里有什么建议吗?

标签: mongodb

解决方案


只需添加 $set 即可更新:

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

推荐阅读