Javascript 数组中嵌入文档的集合更新属性
此代码使用一个循环来Javascript 数组中嵌入文档的集合更新属性,javascript,mongodb,meteor,mongodb-query,Javascript,Mongodb,Meteor,Mongodb Query,此代码使用一个循环来$unset在“value”数组中所有嵌入文档的“checked”属性,然后$set条件计算为true时的属性。 但是当条件为true时,update块无法通过设置checked:“checked”来更新嵌入的文档,我知道这是因为meteor:PRIMARY>db.radioOptions.find({}).pretty()在之前和之后给出相同的结果 我做错了什么?如何修复它?谢谢 meteor:PRIMARY>db.radioOptions.find({}).pretty(
$unset
在“value”数组中所有嵌入文档的“checked”属性,然后$set
条件计算为true时的属性。但是当条件为true时,update块无法通过设置checked:“checked”来更新嵌入的文档,我知道这是因为
meteor:PRIMARY>db.radioOptions.find({}).pretty()代码>在之前和之后给出相同的结果
我做错了什么?如何修复它?谢谢
meteor:PRIMARY>db.radioOptions.find({}).pretty();
{
“_id”:“JXQCSXSTEDQYOTKQXG”,
“名称”:“optionType”,
“价值”:[
{
“名称”:“1主题”,
“标题”:“第一选项”
},
{
“名称”:“第2个选项”,
“标题”:“第二选项”
}
]
}
var doc=RadioOptions.findOne({name:obj.name});
如果(单据类型!=“未定义”){
单据价值forEach(函数(embdoc){
console.log(embdoc);
RadioOptions.update(
{name:obj.name,'value.name':obj.value},
{$unset:{'value.$.checked':“”}
);
if(embdoc.name==obj.value){
console.log(obj.name+“”+obj.value);//例如obj.value=1stOption
RadioOptions.update(
{name:obj.name,'value.name':obj.value},//obj.name=“optionType”
{$set:{'value.$.checked':“checked”}
);
}
})
}
假设您的目标是将名为“2ndOption”的数组元素设置为“checked”,并将所有其他数组元素设置为$unset
。然后,您将执行以下操作:
var doc = RadioOptions.findOne({name: obj.name});
if (typeof doc != 'undefined') {
// You have to update every element
doc.value.forEach(function (embdoc) {
RadioOptions.update(
{ "_id": doc._id, "value.name": embdoc.name },
{ "$unset": { "value.$.checked": "" } }
)
});
// Then just set the one you want
RadioOptions.update(
{ "_id": doc._id, "value.name": "2ndOption" }, // <-- actually using a variable of course
{ "$set": { "value.$.checked": "checked" } }
)
}
var doc=RadioOptions.findOne({name:obj.name});
如果(单据类型!=“未定义”){
//你必须更新每个元素
单据价值forEach(函数(embdoc){
RadioOptions.update(
{“\u id”:doc.\u id,“value.name”:embdoc.name},
{“$unset”:{“value.$.checked”:“}”
)
});
//那就定一个你想要的
RadioOptions.update(
{“\u id”:doc.\id,“value.name”:“2ndOption”},//如果您已经在内存中保存了文档(您已经完成了findOne),为什么不根据需要修改值
字段,然后$set
整件事,而不是做几十次更新呢?这不是批评,我只是想知道这是否是我遗漏的问题的一个参数。