我在尝试更新mongodb
中子文档内的子文档的某些字段时遇到了一些麻烦。
首先,让我们找到我需要更新的文档,看看文档结构如何:
// query:
db.getCollection('collection').find({
application: ObjectId("568b3a2feaa4171d03734776"),
_id: ObjectId("568b3a2feaa4171d03734779"),
status: 'sent',
'mailingList.recipients.email': 'example@example.com' // an index
},
{
'mailingList.$.recipients': true
});
// query result:
{
"_id" : ObjectId("568b3a2feaa4171d03734779"),
"mailingList" : [
{
"id" : 55,
"recipients" : [
{
"metadata" : {
"name" : "Example",
"surname" : "Example"
},
"email" : "example@example.com",
"message" : {
"events" : []
}
}
]
}
]
}
我想要实现的是能够更新 recipients[]
内对象中的任何字段:例如,让我们说{{1} }。到目前为止,我已使用email
运算符尝试了以下操作:
$set
但我收到以下错误:
不能使用部分(mailingList.1.recipients.email的收件人)来 遍历元素({recipients:[{metadata:{name:" Example", 姓:"示例" },email:" example@example.com",message:{events: []}}]})
我错过了什么?我之前已经使用过嵌入式子文档(不像这样,在另一个子文档中有一个子文档)并且使用db.getCollection('collection').update({
application: ObjectId("568b3a2feaa4171d03734776"),
_id: ObjectId("568b3a2feaa4171d03734779"),
status: 'sent',
'mailingList.recipients.email': 'example@example.com'
},
{
$set: {
'mailingList.$.recipients.email': 'newmail@example.com'
}
});
足以更新单个子文档中的任何字段,即:
$set