我可以根据收集条件更新文档吗?

Can I update a document base on collection condition?

我想确保在执行更新之前满足某些条件运算.

在单个查询中使用 MongoDB 是否可行?

比如我有以下集合A:

{"_id":"1", "content":{"a":1, "b":2}},
{"_id":"2", "content":{"a":1, "b":2}},

我想对“_id”为“1”的文档执行更新,前提是整个集合 A 中没有包含“_id”:“2”的文档。

您可以使用 $lookup 检查文档 _id:"2" 是否存在。之后,根据 $lookup 结果执行 $merge 更新回 doc _id:"1".

db.collection.aggregate([
  {
    $match: {
      _id: "1"
    }
  },
  {
    "$lookup": {
      "from": "collection",
      "let": {
        docId: "2"
      },
      "pipeline": [
        {
          $match: {
            $expr: {
              $eq: [
                "$_id",
                "$$docId"
              ]
            }
          }
        }
      ],
      "as": "doc2"
    }
  },
  {
    $match: {
      doc2: []
    }
  },
  {
    $addFields: {
      someNewFields: "..."
    }
  },
  {
    $project: {
      doc2: false
    }
  },
  {
    "$merge": {
      "into": "collection",
      "on": "_id",
      "whenMatched": "replace"
    }
  }
])

这是文档 _id:"2" 存在的 Mongo playground

这里是 Mongo playground 文档 _id:"2" 不存在。