我可以使用$addToSet来更新现有的子文档吗? 如果是这样,我怎么能告诉 MongoDb 匹配是当"oid"和"实例"相同并且"值"字段是应该更新的内容时。
谢谢
{ $addToSet : { "data" : { $each : [
{"oid" : "1.3.6.1.4.1.111.3.10.9.9.88",
"instance" : "0",
"value" : "8888"}
{"oid" : "1.3.6.1.4.1.111.3.10.9.9.77",
"instance" : "0",
"value" : "88888888"}
] } } }
"_id" : 483,
"data" : [{
"oid" : "1.3.6.1.4.1.111.3.10.2.5.35.3",
"instance" : "0",
"value" : "0"
}, {
"oid" : "1.3.6.1.4.1.111.3.999.2.5.2",
"instance" : "0",
"value" : "RFCluster"
}, {
"oid" : "1.3.6.1.4.1.111.3.30.5.1.1",
"instance" : "0",
"value" : null
}]}
不能仅使用 $addToSet 更新特定的子文档。我认为您应该更改架构,以便每个"数据"元素都是自己的文档,并将 ID 移动到如下所示的data_id中:
{
"data_id": 483,
"oid" : "1.3.6.1.4.1.111.3.10.2.5.35.3",
"instance" : "0",
"value" : "0"
}
然后,您可以非常轻松地使用诸如upsert之类的东西来仅更新一个值:
db.colname.update(
{ "data_id" 483, "oid" : "1.3.6.1.4.1.111.3.10.2.5.35.3", "instance" : "0" }, // criteria
{ $set: { 'value' : "new value" } }, // update spec
true // this is to enable "upsert"
);