仅当不存在类似文档时才将新文档插入 Mongo

时间:2021-03-17 13:07:00

标签: mongodb

我在 Mongo 集合中有以下文档-

{
  key1: "someValue",
  key2: "someValue2",
  key3: "someValue3",
  firstSeen: "2021-03-17",
  lastSeen: "2021-03-17",
  timesSeen: 1
}

仅当其中不存在具有 key1key2key3 值的类似文档时,我才会将此文档添加到 Mongo。

如果确实存在类似的文档,我只想更新 timesSeen(加一)和 lastSeen(设置今天的日期)值。

这样做的正确和最有效的方法是什么?是否有一个我可以使用的命令,它可以在不搜索相关文档并插入新文档/更新存在之前根据该文档执行此操作

1 个答案:

答案 0 :(得分:2)

您可以在更新时使用 upsert 和 $and 运算符来检查键是否存在,并使用 $eq 来比较值

db.collection.update({
  $and: [
    {
      $and: [
        {
          key1: {
            $exists: true
          }
        },
        {
          key1: {
            $eq: "someValue"
          }
        }
      ]
    },
    {
      $and: [
        {
          key2: {
            $exists: true
          }
        },
        {
          key2: {
            $eq: "someValue2"
          }
        }
      ]
    },
    {
      $and: [
        {
          key3: {
            $exists: true
          }
        },
        {
          key3: {
            $eq: "someValue3"
          }
        }
      ]
    },
    
  ]
},
{
  $inc: {
    timesSeen: 1
  },
  $set: {
    key1: "someValue",
    key2: "someValue2",
    key3: "someValue3",
    lastSeen: new Date()
  }
},
{
  upsert: true
})

Mongo 游乐场:https://mongoplayground.net/p/Kqt3TYCs3Aw