MongoDB中$ lt / $ gt和$ ne之间有区别吗?

时间:2011-08-01 01:04:22

标签: mongodb

我刚刚开始使用MongoDB并尝试了解索引的工作原理。我有一个集合中的项目列表。每个项目都有一个增加的版本。然后,删除所有先前版本(小于当前版本)(记录未更新,以便两个版本可用一段时间)。商品ID和版本有复合索引。对于删除,是否使用$ ne与$ lt?

有所不同(在性能方面)

我会假设不,但我只想确认。

2 个答案:

答案 0 :(得分:4)

在不知道实施细节的情况下$lt可能比$ne更有效。在B树索引上$ne将是两个范围扫描($lt$gt),而$lt只是一个。

但在你的情况下$lt似乎是你想要的(找到旧版本)。如果您使用了$ne,则可能会意外删除您认为不存在的较新的版本,但实际上可能是在平均时间内创建的。请记住,MongoDB不支持跨文档的事务或一致视图。并发更新可能会在这里咬你。

答案 1 :(得分:1)

实际上,存在巨大差异。 "$ne and $nin operators are not selective",这意味着索引根本不会加速查询的那一部分。因此,如果使用$ ne,那么MongoDB将不会使用复合索引的版本部分。