Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 什么';$min/$max和$lte/$gt之间的区别是什么?_Mongodb - Fatal编程技术网

Mongodb 什么';$min/$max和$lte/$gt之间的区别是什么?

Mongodb 什么';$min/$max和$lte/$gt之间的区别是什么?,mongodb,Mongodb,我不太明白$min/$max和$lte/$gt之间的区别是什么?我不确定这些方法的查询修饰符和查询运算符有何不同。我知道复合索引边界需要$min/$max,但在单个索引字段上指定边界会有区别吗?简单解释:如果没有该字段上的索引,min-max不起作用 详细解释: 和是查询修饰符,和是查询运算符。查询修饰符(顾名思义)修改查询的行为。但是 在服务器上,MongoDB将查询和选项视为单个选项 反对 这意味着如果您正在执行db.coll.find({}).min({a:1})它不会找到所有内容,然后选

我不太明白
$min
/
$max
$lte
/
$gt
之间的区别是什么?我不确定这些方法的查询修饰符和查询运算符有何不同。我知道复合索引边界需要
$min
/
$max
,但在单个索引字段上指定边界会有区别吗?

简单解释:如果没有该字段上的索引,min-max不起作用

详细解释: 和是查询修饰符,和是查询运算符。查询修饰符(顾名思义)修改查询的行为。但是

在服务器上,MongoDB将查询和选项视为单个选项 反对

这意味着如果您正在执行
db.coll.find({}).min({a:1})它不会找到所有内容,然后选择所有更大或等于一的内容。大家最熟悉的是
sort
modifier。您也可以以这种方式使用每个修饰符
db.collection.find()。\u addSpecial(“修饰符名称”、“选项”)

两个命令都在做类似的事情。差别是微妙的: $min和$max只能在该字段具有索引的情况下进行搜索。否则它将错误地失败。此外,在搜索它时,使用的是该索引,如果您想使用其他内容,则必须使用命令说明这一点

假设您有具有以下格式文档的集合拉链:

{
  "city" : "ACMAR",
  "loc" : [-86.51557, 33.584132],
  "pop" : 6055,
  "state" : "AL",
  "_id" : 35004
}
如果您要执行
db.zips.find().min({pop:5000})
。它只会被错误压碎。在使用$gte执行相同操作时,将很好地执行。如果您要确保在此字段上建立索引,则可以执行此命令,它将使用此索引

关于提示命令的注释。假设您需要类似以下内容
db.zips.find({u id:333}).min({pop:5000})
,并且您有pop上的索引。您将使用它,但是使用id索引会更好

因此,总的来说,由您决定什么更好。

  • 如果您在字段上有一个索引,并且总是想使用它,那么可以使用.max/.min
  • 如果你没有它-你必须坚持使用$gte/$lt
  • 如果您有一个索引,但认为mongo更清楚它应该使用什么索引,那么也可以使用$gte/$lt

PS.我不喜欢这个命令,因为它们模棱两可。一分钟的边界是包含的,最大的边界是独占的,我不知道如何记住它。

$min和$max决定了索引中扫描的最小值和最大值,其中gt和lte只是范围查询,所以,
$min
/
$max
更好?如果不是最终结果,我不确定这是否会影响性能。这取决于您在做什么?我想在_id字段上翻页一个集合,并在投票数上翻页另一个集合。
$min
$max
还强制使用索引(对于指定的字段),即使另一个索引可能更有意义。最小值和最大值确实会影响查找标准与$gt和ltcan不同的地方。请重新表述您的评论,因为我无法理解:-)最小值和最大值能够定义索引的下限,或者更确切地说,如果
$min
/
$max
将光标绑定在索引级别,则范围运算符不使用下限,您可能希望何时使用
$lte
/
$gt
?我仍然不明白为什么这些运算符同时存在,尽管我知道它们在索引方面的具体区别。@PaulKonova一个很好的理由是改变查找的实际工作方式,有许多分页情况下,$gt和lt不起作用,因此限制索引的实际扫描,还有其他情况