如何在MongoDB中执行条件upsert

时间:2016-03-09 15:05:37

标签: 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} )

我想根据以下条件执行upsert:

  1. 如果“名称”和“城市”没有这样的人,请插入
  2. 如果有“姓名”和“城市”的人,请将“年龄”更新为更大的
  3. 所以如果我用

    执行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命令吗?

1 个答案:

答案 0 :(得分:1)

您可以使用以下查询

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

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

您可以在MongoDB Website

获取更多信息