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

时间:2016-01-05 04:18:27

标签: node.js mongodb mongoose nosql

我在尝试更新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

0 个答案:

没有答案