mongodb - 如何在 MongoDB 中执行条件更新插入

标签 mongodb

我提供一个简单的示例来描述我正在寻找的内容。

我有一个城市里最古老的人的收藏。 目前看起来是这样的:

{ "name" : "Arthur", "city" : "New York", "age" : 42}
{ "name" : "Arthur", "city" : "London",   "age" : 42}
{ "name" : "Berta",  "city" : "New York", "age" : 42}

我创建了以下索引:

db.people.createIndex( { name:1, city:1 }, { unique: true} )

我想根据以下条件执行更新插入:

  1. 如果“姓名”和“城市”没有这样的人,请插入
  2. 如果“姓名”和“城市”都有人,则将“年龄”更新为较大者

所以如果我执行更新插入

{ "name" : "Arthur", "city" : "New York", "age" : 43}

之后的集合将如下所示:

{ "name" : "Arthur", "city" : "New York", "age" : 43}
{ "name" : "Arthur", "city" : "London",   "age" : 42}
{ "name" : "Berta",  "city" : "New York", "age" : 42}

有人可以告诉我 mongo shell 的 upsert 命令吗?

最佳答案

您可以使用以下查询来执行此操作

db.col.update(
{ "name" : "Arthur", "city" : "New York", age: {$lte: 43}},
{ "name" : "Arthur", "city" : "New York", "age":43},
{upsert: true})

参见{upset: true},此选项确保如果存在现有记录,则仅更新它,否则插入新文档。

您可以通过MongoDB Website获取更多信息

关于mongodb - 如何在 MongoDB 中执行条件更新插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35895252/

相关文章:

mongodb - Mongo导入数据类型

node.js - 调试文档验证错误

mongodb - 对嵌入式子类的约束-Grails,GORM,Mongo

java - 如何在多线程场景中使用自行生成的_id更新插入mongodb文档/记录

node.js - 在 Node.JS Web 应用程序中使用 mongoDB

node.js - MongoDB/Mongoose 单元测试 - 最佳实践?

Java MongoDB 无法使用集合中的字符串条件进行查询

c# - MongoDB C# 查询表达式(如何?)

mongodb - Mongodb Mapreduce - 半径内用户的热门场所

sql - 对于社交网站(使用 Ruby on Rails 开发)来说,MongoDB 会是一个好主意吗?