首页 > 解决方案 > Mongodb更新集合中的字段,同时自动生成另一个字段

问题描述

我有一个包含如下数据的集合:

[{
_id: a,
createdAt: "2020-11-10",
createdBy: "test@test.com",
features: {
first: true,
second: true
}},{
_id: b,
createdAt: "2020-11-10",
createdBy: "test@test.com",
features: {
first: false,
second: true
}}]

我想插入一个新功能:第三:真

db.collection.update(  { _id:...} , { $set: { features.third : true  } } 

我的问题是,是否可以为这个功能之一插入一个新行,同时当 mongodb 看到有一个像“third”这样的字段并且值为 true 时,mongodb 会生成一个新字段( featureConfig) 自动哪个值是空字符串?所以期望值为:

{
_id: b,
createdAt: "2020-11-10",
createdBy: "test@test.com",
features: {
first: false,
second: true,
third: true
},
featureConfig: "",
}

任何帮助,将不胜感激。

标签: javascriptmongodb

解决方案


试试这个查询并检查它是否按预期工作(示例

这是查询:

db.collection.aggregate([
  {
    "$match": {
      "id": 1
    }
  },
  {
    "$set": {
      "features.third": true
    }
  },
  {
    "$project": {
      "features": 1,
      "featureConfig": {
        "$cond": {
          "if": "$features.third",
          "then": "",
          "else": "$false"
        }
      }
    }
  }
])

两个初始阶段与您拥有的相同,过滤以匹配id并设置值。然后我习惯于根据条件$project创建一个字段featureConfig。如果features.third值为 true,则创建字段,否则不创建。


推荐阅读