对象数组中的findOneAndUpdate属性

时间:2018-08-01 13:54:08

标签: mongodb

我正在尝试更新对象数组中的属性-查找部分已经起作用。 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"
    }
} 

1 个答案:

答案 0 :(得分:1)

您需要使用$ positional运算符来更新数组元素

db.collection('Referrals').findOneAndUpdate(
  { "emails": { "$elemMatch": { "name": email }}}, 
  { "$set": { "emails.$.signedUp": true, "emails.$.updated": new Date() }}
)