Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数组中嵌入文档的集合更新属性_Javascript_Mongodb_Meteor_Mongodb Query - Fatal编程技术网

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
整件事,而不是做几十次更新呢?这不是批评,我只是想知道这是否是我遗漏的问题的一个参数。