更新 mongoDB 中嵌入的文档数组

问题描述 投票:0回答:1
    Shortlist.findOneAndUpdate(
        {
            _id: userId,
            "shortlistedPlayers.playerId": { $ne: playerId }
        },
        {
            $push: {
                shortlistedPlayers: {
                    playerId,
                    addedDate: Date.now()
                }
            }
        }
    );

我想做的就是找到一个与 userId 相对应的文档,然后推送一个playerId,以防它尚不存在。

这个查询工作正常,但我认为过滤器查询的第二部分“shortlistedPlayers.playerId”:{ $ne:playerId }将对整个集合进行扫描。

mongodb是先找到文档再更新内嵌文档吗?

尝试了 addToSet 并删除了过滤器的第二部分,但它不起作用,因为 mongoDB 比较整个文档,它总是不同的,因为每个嵌入的文档都有一个 dateFiled 并且它总是不同的

mongodb performance query-optimization
1个回答
0
投票

事实证明,MongoDB 不会对整个集合的每个嵌入文档数组进行扫描。 MongoDB 首先获取文档,然后对 MongoDB 找到的特定文档的嵌入文档应用第二个条件。

© www.soinside.com 2019 - 2024. All rights reserved.