对象数组中的findOneAndUpdate属性

问题描述 投票:1回答:1

我正在尝试更新对象数组中的属性 - 查找部分已经有效。 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": "[email protected]",
    "emails": [
        {
            "name": "[email protected]",
            "signedUp": false
        },
        {
            "name": "[email protected]",
            "signedUp": false
        },
        {
            "name": "[email protected]",
            "signedUp": false
        },
        {
            "name": "[email protected]",
            "signedUp": false
        }
    ],
    "created": {
        "$date": "2018-07-31T12:04:20.625Z"
    },
    "updated": {
        "$date": "2018-07-31T12:04:20.625Z"
    }
} 
mongodb
1个回答
1
投票

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

db.collection('Referrals').findOneAndUpdate(
  { "emails": { "$elemMatch": { "name": email }}}, 
  { "$set": { "emails.$.signedUp": true, "emails.$.updated": new Date() }}
)
© www.soinside.com 2019 - 2024. All rights reserved.