如何在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岁的现有行,则查询将不匹配任何内容,您将添加一个新行。然后,您将有两行名称和城市相同,但年龄不同,对吗?我认为它属于索引字段,从集合(名称、城市、年龄)到(名称、年龄)是唯一的