Mongodb 更改子文档mongoose的多个对象中的特定字段
我试图将子文档的多个对象中的特定字段更改为false,但当我尝试使用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',
$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" } ]
}
}
])