如何在MongoDB中执行条件upsert
我提供了一个简单的例子来描述我在寻找什么 我收藏了一个城市里最年长的人。 目前看起来是这样的:如何在MongoDB中执行条件upsert,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
{ "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} )
我想基于以下条件执行upsert:
{ "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}
,此选项确保如果存在记录,只需更新它,否则插入新文档
您可以在上获得更多信息“更新年龄到更大”是什么意思?如果有人试图更新的年龄小于现有记录,不应该更新吗?我只希望在同一城市有老年人的情况下更新。例如,纽约另一位42岁(或更小)的亚瑟不会进入db。纽约另一位43岁(或更高)的亚瑟将加入db(更新)。凯撒无论如何都会被插入,因为到目前为止还没有凯撒。抱歉,如果我不够清楚。明白了,请查看我的更新解决方案谢谢Saleem。难以置信的简单。在发布我的问题之前,我已经阅读了mongodb文档,但没有得到它。。。有时,示例会提供更多帮助。但是,请稍候,如果存在名称和城市相同但年龄为44岁的现有行,则查询将不匹配任何内容,您将添加一个新行。然后,您将有两行名称和城市相同,但年龄不同,对吗?我认为它属于索引字段,从集合(名称、城市、年龄)到(名称、年龄)是唯一的