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 不会对整个集合的每个嵌入文档数组进行扫描。 MongoDB 首先获取文档,然后对 MongoDB 找到的特定文档的嵌入文档应用第二个条件。