在MongoDB中$lt/$gt和$ne之间是否存在差异?



我刚刚开始使用MongoDB,并试图了解索引是如何工作的。我有一个收藏品的清单。每个项目都有一个增量版本。然后,删除所有以前的版本(小于当前版本)(不更新记录,以便两个版本在一段时间内可用)。在项目ID和版本上有一个复合索引。对于删除,使用$ne和$lt是否有区别(在性能方面)?

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

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

实际上,两者有很大的区别。"$ne和$nin操作符是非选择性的",这意味着索引根本不会加快这部分查询的速度。所以如果你使用$ne,那么MongoDB将不会使用复合索引的版本部分。

相关内容

最新更新