[英]How to add new attribute to array of nested sub document in MongoDB
{
"_id" : ObjectId("559f85351554febf038b5c70"),
"company_name" : "Honey Crunch Popcorn Co",
"tech" : [
{
"tech_name" : "Magento",
"user" : "Rahul",
},
{
"tech_name" : "Volusion",
"user" : "Tina",
}
]
}
我只想将新属性“ verified:true”添加到“ tech_name”:“ Volusion”的“ tech”数组中,这样就可以得到结果,
{
"_id" : ObjectId("559f85351554febf038b5c70"),
"company_name" : "Honey Crunch Popcorn Co",
"tech" : [
{
"tech_name" : "Magento",
"user" : "Rahul"
},
{
"tech_name" : "Volusion",
"user" : "Tina",
"verified" : "true"
}
]
}
请帮忙。
为此,您可以在update语句中使用$set
运算符,同时通过位置$
运算符引用匹配的数组元素:
db.collection.update(
{
"_id": ObjectId("559f85351554febf038b5c70"),
"tech.tech_name": "Volution"
},
{
"$set": {
"tech.$.verified": true
}
}
)
所以这样做是:
.update()
的“查询”或第一个参数部分都通过字段引用找到唯一的文档(不是真正需要的),其次在嵌套数组中找到它自己的匹配“字段/属性”的字段。 最后一部分对于下一阶段很重要。
.update()
方法的“ update”部分.update()
此处为“ second”参数)包含“修改内容”的定义。 在此处使用$set
运算符可确保仅以任何方式修改引用的字段。
然后,这里的“位置” $
运算符可确保只有从查询部分引用的数组元素的“匹配索引”才是要更新的元素。 这使用了“点符号”形式
$set: { "tech.$.verified": true }
这将引用元素中的“正确”索引字段,并“创建”一个不存在的新属性,否则将“覆盖”现有值。
这些是工作原理的基础。 从这里带走的主要事情是:
匹配要更新的数组中元素的索引值,并通过“点符号”对其进行引用。
对字段使用$set
操作或其他适当的“更新运算符” ,而不要在“更新”中提供否则将“覆盖”现有对象的“原始”对象结构。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.