【问题标题】:Mongo update specific subdocMongo 更新特定子文档
【发布时间】:2026-02-03 08:40:02
【问题描述】:

我有以下 mongo 条目:

et = {
languages: [{
    code:  String,
    title: String,
    tools: [{
         description: String,
         mds: [ObjectId]
    }],
}]
//some more stuff
}

我现在需要更新这个对象并将一个新的 ObjectId 添加到 mds 数组中。我需要通过代码元素指定语言元素,并通过描述参数指定工具条目。

到目前为止,我想出了以下更新方法,我可以使用它更新正确语言条目的某些元素:

ETs.find({
        '_id':mdAttributes.etID,
        'languages':{'$elemMatch':{'code':mdAttributes.language}}
    },{
        '$set':{
            'languages.$.title':'update2.jpg'
         }
    });

但是我不知道如何为正确的工具添加查询。

所以我的套装应该是这样的:

ETs.find({
        '_id':mdAttributes.etID,
        'languages':{'$elemMatch':{'code':mdAttributes.language}}
    },{
        '$set':{
            'languages.$.tools.$.mds': ["newId"]
         }
    });

有没有办法在 mongo 中实现这一点?

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    简短的回答,不。位置运算符目前不适用于嵌套数组 (https://jira.mongodb.org/browse/server-831)。

    您仍然可以通过设置 whole 工具数组条目来做到这一点(就像您在第一个示例中所做的那样,但使​​用工具数组而不是标题字段)。

    【讨论】: