使用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没有。。。?反之亦然,我应该怎么做呢?如果部分更新失败,那么更新失败,所以什么也不保存