仅当没有具有相同“键”:“值”对(MongoDB)的文档时,如何将子文档插入到数组字段中?

时间:2021-04-11 08:47:22

标签: mongodb

我有一个看起来像这样的文档集合:

{
  "AAA": 1,
  "BBB": [
    {
      "CCC": 1,
      "DDD": [1,2,3]
    }
  ]
}

仅当没有带有 {"CCC": 1} 密钥对的对象时,如何将新的子文档 ({"CCC": 1, "DDD": []}) 插入到 "BBB" 数组中?

1 个答案:

答案 0 :(得分:1)

您实际上可以通过多种方式执行此操作,最简单的方法是在文档具有 CCC: 1 时使查询“失败”匹配,如下所示:

db.collection.updateOne(
    {
        _id: docId,
        'BBB.CCC': {
            $ne: 1,
        },
    },
    {
        '$push': {
            BBB: {
                'CCC': 1,
                'DDD': [],
            },
        },
    },
);

现在,如果文档的 BBB.CCC 值为 1,那么更新将找不到要更新的文档,并且不会像您预期的那样更新任何内容。

Mongo Playground

相关问题