我不太明白$min/ $max和$lte/ 之间的区别是什么$gt?我不确定查询修饰符与这些方法的查询运算符有何不同.我知道$min/ $max对于复合索引边界是必要的,但它是否对在单个索引字段上指定边界有所不同?
简单说明: 如果没有该字段的索引,则min max不起作用.
更长的解释: $ min和$ max是查询修饰符,$ lte和$ gt是查询运算符.查询修饰符(顾名思义)修改查询的行为.但
在服务器上,MongoDB将查询和选项视为单个对象.
这意味着,如果你这样做,db.coll.find({}).min({a : 1});它找不到所有东西,然后选择更大或更大的一切.每个人最熟悉的是sort修饰符.您也可以这种方式使用每个修饰符db.collection.find()._addSpecial("modifierName", "options" )
这两个命令都在做类似的事情.差异很微妙:$ min和$ max只能搜索该字段是否有索引.否则它将失败并出错.此外,在搜索它时正在使用该索引,如果您想使用其他东西,您必须使用hint命令告诉它.
假设您的集合拉链包含以下格式的文档:
{
"city" : "ACMAR",
"loc" : [-86.51557, 33.584132],
"pop" : 6055,
"state" : "AL",
"_id" : 35004
}
Run Code Online (Sandbox Code Playgroud)
如果你愿意的话db.zips.find().min( { pop: 5000 } ).它会因为错误而粉碎.虽然使用$ gte做同样的事情会被执行得很好.如果要确保此字段的索引,则可以执行此命令,它将使用此索引.
关于提示命令的评论.假设您需要这样的东西,db.zips.find({_id : 333}).min( { pop: 5000 } )并且您有弹出索引.你会使用它,但是使用_id索引要好得多.
总而言之,由您来决定什么是更好的.
PS.我不喜欢这些命令,因为它们含糊不清.一分钟边界是包容性的,最大值是独家的,我不知道如何记住它.
| 归档时间: |
|
| 查看次数: |
476 次 |
| 最近记录: |