如何使用$ set和$ elemMatch之类的东西更新MongoDB文档数组中的单个子文档?

Jor*_*dan 2 mongodb meteor mongodb-query

我有一个像这样的集合结构:

albums: {
    2oBkjqYFwf3vrgDj4: {
        _id: "2oBkjqYFwf3vrgDj4",
        titles: [
            {
                titleText: "i am an album"
            },
            {
                titleText: "this is my other title"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我想做类似下面的事情来更新titleText等于某事的地方,然后改变它:

db.albums.update({"_id": "2oBkjqYFwf3vrgDj4", "titles": {$elemMatch: {"titleText": "i am an album"}}},
    {$set: {
        "titles.titleText": "i am not an album"
    }
)
Run Code Online (Sandbox Code Playgroud)

我知道我可以做一个foreach,但这似乎是浪费了很多资源,因为我计划有一个索引titles.titleText.

有什么我想念的,或者有没有一个简单的方法来做到这一点?我正在使用Meteor,但如果有一种方法可以在MongoDB中执行此操作,我认为它不应该改变任何逻辑.

感谢大家!

Jor*_*dan 5

结果我的问题是链接的转贴

这个问题可以通过MongoDB来解决,

db.albums.update({
        "_id": "2oBkjqYFwf3vrgDj4",
        "titles.titleText": "i am an album"
    },
    {$set:
        {"titles.$.titleText": "i am not an album"}
    }
)
Run Code Online (Sandbox Code Playgroud)

当发布上一个问题时,minimongo不支持位置运算符.截至目前,出于安全原因,不能从客户端代码使用mongo选择器.

必须从服务器上的Meteor.method()调用上述方法.