javascript - 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: "",
}
任何帮助,将不胜感激。
解决方案
试试这个查询并检查它是否按预期工作(示例)
这是查询:
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,则创建字段,否则不创建。
推荐阅读
- javascript - express.js request.query 为空
- java - 获取节点的父节点(Firebase)
- reactjs - 在 AntD 表格单元格内添加 AntD 图标
- skia - 如何在skia中从SkPicture生成skp文件?
- c# - 我如何在vscode中实时刷新代码
- nginx - 通过入口在特定子域上公开 tcp 服务(端口 5432)
- mysql - 对子查询使用主查询条件
- python - 语音识别太慢
- c - 我正在尝试使用指针合并两个排序的(int)数组,并且由于某种原因它存储了地址
- android - 完成 Firebase 函数(Uri 和字符串)Android Java 时出现 ClassCastException