我正在尝试更新对象数组中的属性-查找部分已经起作用。 SignedUp应该设置为true。
这是我的方法:
function lookupReferral(email) {
return getConnection().then(db => db.collection('Referrals').findOneAndUpdate(
{
emails: {$elemMatch: {name: email}}
},
{
$set: {
emails: {$elemMatch: {signedUp: true}},
updated: new Date()
}
}));
}
我在$ set子句中的想法是,我再次指定特定对象,然后再指定我要设置的属性,但是它不起作用。为了进一步了解,下面是记录:
{
"_id": {
"$oid": "5b60504420f8e626148494e4"
},
"accountCode": "auth0|5b4de18d8bed60110409ded5",
"accountEmail": "example@gmail.com",
"emails": [
{
"name": "azzz@zzz.dk",
"signedUp": false
},
{
"name": "ds@d.dk",
"signedUp": false
},
{
"name": "ds@d.dk",
"signedUp": false
},
{
"name": "ds@d.dk",
"signedUp": false
}
],
"created": {
"$date": "2018-07-31T12:04:20.625Z"
},
"updated": {
"$date": "2018-07-31T12:04:20.625Z"
}
}
答案 0 :(得分:1)
您需要使用$ positional
运算符来更新数组元素
db.collection('Referrals').findOneAndUpdate(
{ "emails": { "$elemMatch": { "name": email }}},
{ "$set": { "emails.$.signedUp": true, "emails.$.updated": new Date() }}
)