问题:更新子文档的子文档中的值

我有一些麻烦,试图更新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' }