Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
Mongodb 更改子文档mongoose的多个对象中的特定字段_Mongodb_Mongoose_Mongodb Query_Mongoose Schema - Fatal编程技术网

Mongodb 更改子文档mongoose的多个对象中的特定字段

Mongodb 更改子文档mongoose的多个对象中的特定字段,mongodb,mongoose,mongodb-query,mongoose-schema,Mongodb,Mongoose,Mongodb Query,Mongoose Schema,我试图将子文档的多个对象中的特定字段更改为false,但当我尝试使用$set更新文档时,mongoose出现了问题 这是数据结构 [{ name: 'Joe', card: [ { type: 'visa', select: true}, { type: 'masterCard', select: false}, { type: 'unionPay', select: true}, ] },{ name: 'Pascal',

我试图将子文档的多个对象中的特定字段更改为false,但当我尝试使用
$set
更新文档时,mongoose出现了问题

这是数据结构

[{
    name: 'Joe',
    card: [
      { type: 'visa', select: true},
      { type: 'masterCard', select: false},
      { type: 'unionPay', select: true},
    ]
},{
    name: 'Pascal',
    card: [
      { type: 'unionPay', select: false},
      { type: 'visa', select: true},
      { type: 'masterCard', select: false},
    ]
}]
执行结果

[{
    name: 'Joe',
    card: [
      { type: 'visa', select: false}, <--- was changed to false
      { type: 'masterCard', select: false},
      { type: 'unionPay', select: false}, <--- was changed to false
    ]
},{
    name: 'Pascal',
    card: [
      { type: 'unionPay', select: false},
      { type: 'visa', select: true},
      { type: 'masterCard', select: false},
    ]
}]
我做错了什么?

演示-

使用

筛选的位置运算符$[]标识与更新操作的arrayFilters条件匹配的数组元素

您可以一次更新1个顶级索引

db.collection.update(
 { name: "Joe" },
 { $set: { "card.$[c].select": false } },
 { arrayFilters: [ { "c.type": "visa" } ] }
)

用于在一个go中进行两次查询

db.collection.bulkWrite( [
   {
      updateOne : {
         "filter":{ name: "Joe" },
         "update": { $set: { "card.$[c].select": false } },
         "arrayFilters": [ { "c.type": "visa" } ]
      }
   },
   {
      updateOne : {
         "filter":{ name: "Joe" },
         "update": { $set: { "card.$[c].select": false } },
         "arrayFilters": [ { "c.type": "unionPay" } ]
      }
   }
])

谢谢我使用了``db.collection.update({name:“Joe”},{$set:{”card.$[c].select:{false}},{arrayFilters:[{“c.select:{$ne:false}]}})``并且它不用写就可以工作bulk@HenryOkonkwo真棒:)
db.collection.bulkWrite( [
   {
      updateOne : {
         "filter":{ name: "Joe" },
         "update": { $set: { "card.$[c].select": false } },
         "arrayFilters": [ { "c.type": "visa" } ]
      }
   },
   {
      updateOne : {
         "filter":{ name: "Joe" },
         "update": { $set: { "card.$[c].select": false } },
         "arrayFilters": [ { "c.type": "unionPay" } ]
      }
   }
])