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

MongoDB中的$lt/$gt和$ne之间有区别吗?,mongodb,Mongodb,我刚刚开始使用MongoDB,并试图了解索引是如何工作的。我有一份收藏中的物品清单。每个项都有一个递增的版本。然后,删除所有以前的版本(低于当前版本)(记录不会更新,以便两个版本都可用一段时间)。项目ID和版本上有一个复合索引。对于删除,您是否使用$ne和$lt(在性能方面)有区别 我假设没有,但我只想确认。在不知道实施细节的情况下,$lt可能比$ne更有效。在B树索引上,$ne将是两个范围扫描($lt和$gt),而$lt只是一个范围扫描 但在您的情况下,$lt似乎就是您想要的(查找旧版本)。如

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


我假设没有,但我只想确认。

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


但在您的情况下,
$lt
似乎就是您想要的(查找旧版本)。如果您使用了
$ne
,您可能会意外地删除您认为不存在但实际上可能同时创建的新版本。请记住,MongoDB不支持跨文档的事务或一致视图。同步更新可能会对您造成伤害。

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


但在您的情况下,
$lt
似乎就是您想要的(查找旧版本)。如果您使用了
$ne
,您可能会意外地删除您认为不存在但实际上可能同时创建的新版本。请记住,MongoDB不支持跨文档的事务或一致视图。同步更新可能会让你头疼。

事实上,这有很大的区别。这意味着索引根本不会加速查询的这一部分。因此,如果您使用$ne,那么MongoDB将不会使用复合索引的版本部分。

实际上,这是一个巨大的差异。这意味着索引根本不会加速查询的这一部分。因此,如果您使用$ne,那么MongoDB将不会使用复合索引的版本部分