问题:更新子文档的子文档中的值
我有一些麻烦,试图更新MongoDB中的一个子文档中的子文档的一些领域。
首先,让我们find我需要更新的文档,看看文档结构如何:
// 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[]
中的对象中的任何字段:比如说, email
。 到目前为止,我已经尝试使用$set
操作符:
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' } });
但我得到以下错误 :
({recipients:[{metadata:{name:“Example”,surname:“Example”},email:“example@example.com”)不能使用该部分(mailingList.1.recipients.email的收件人) ,消息:{events:[]}}]})
我错过了什么? 我已经使用embedded式子文档之前(不像这里有一个子文档在另一个子文档内),并使用$set
足以更新单个子文档内的任何字段,即:
$set: { 'mailingList.$.email': 'newmail@gmail.com' }