{
"_id" : ObjectId("559f85351554febf038b5c70"),
"company_name" : "Honey Crunch Popcorn Co",
"tech" : [
{
"tech_name" : "Magento",
"user" : "Rahul",
},
{
"tech_name" : "Volusion",
"user" : "Tina",
}
]
}
我想在"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"
}
]
}
请帮帮忙。
发布于 2015-07-13 15:12:50
为此,在update语句中使用$set操作符,同时通过运算符引用匹配的数组元素。
db.collection.update(
{
"_id": ObjectId("559f85351554febf038b5c70"),
"tech.tech_name": "Volution"
},
{
"$set": {
"tech.$.verified": true
}
}
)
所以这样做是为了:
.update()
的“查询”或第一个参数部分通过字段引用找到唯一的文档(不是真正必需的),其次在嵌套数组my自身匹配的" field /property“中找到一个字段。这最后一部分对下一阶段很重要。.update()
方法的"update“部分作为”第二个“参数包含了”被修改的内容“的定义。这里使用$set
运算符可以确保只以任何方式修改引用的字段。
然后,这里的“位置”$
运算符确保只有从查询部分引用的数组元素的“匹配索引”才是更新的元素。这使用“点符号”形式的
$set:{ "tech.$.verified":true }
它引用元素中的“正确”索引字段,并在不存在或以其他方式“覆盖”现有值的情况下“创建”一个新属性。这些都是如何工作的基本知识。从这里取走的主要东西是:
$set
操作或其他适当的“更新操作员”,而不是在"update“中提供”原始“对象结构,否则会”覆盖“现有对象。https://stackoverflow.com/questions/31385756
复制相似问题