更新猫鼬中所有数组元素的属性

时间:2019-07-30 09:00:18

标签: node.js mongoose

我有一个像这样的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'元素未更新。

我将如何解决此问题?

1 个答案:

答案 0 :(得分:2)

您可以使用数组更新运算符,即位置运算符

  

$ []

它指示修改所有元素。

尝试一下:

  

{'$ set':{'referral.vip。$ []。paid':true}};

您可以参考此文档:https://docs.mongodb.com/manual/reference/operator/update/positional-all/