我正在尝试更新对象数组中的属性 - 查找部分已经有效。 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"
}
}
您需要使用$ positional
运算符来更新数组元素
db.collection('Referrals').findOneAndUpdate(
{ "emails": { "$elemMatch": { "name": email }}},
{ "$set": { "emails.$.signedUp": true, "emails.$.updated": new Date() }}
)