我有一个像这样的mongo文档架构
{
_id:'xxxxxx',
vip:[
{paid:false,id:'xxxxxx',uid:'xxxxxx',time:ISODate("2019-07-30T06:32:45.666Z")},
{paid:false,id:'xxxxxx',uid:'xxxxxx',time:ISODate("2019-07-30T07:32:45.666Z")},
{paid:false,id:'xxxxxx',uid:'xxxxxx',time:ISODate("2019-07-30T08:32:45.666Z")},
]
}
我想更新一个文档的“ vip”数组,如果元素的“ paid”属性为false,则将该数组中的元素标记为true。
const query = {'_id':_id,'vip': { '$elemMatch':{paid:false} }};
let update = {};
update= { '$set': { 'referral.vip.$.paid':true }};
collection.updateOne(query,update,{new:true});
上面的代码可以正常工作,但是问题在于它仅将第一个'false'元素更新为'true',其余的'false'元素未更新。
我将如何解决此问题?
答案 0 :(得分:2)
您可以使用数组更新运算符,即位置运算符。
$ []
它指示修改所有元素。
尝试一下:
{'$ set':{'referral.vip。$ []。paid':true}};
您可以参考此文档:https://docs.mongodb.com/manual/reference/operator/update/positional-all/