MongoDB的aggregation $min与query modifier $min与find().sort()之间有什么区别,它返回the_field的最小值:db.the_collection.find().sort({the_field:1}).limit(1)
?
如果每分钟有几百个电话来检索集合中的最小元素并且每次都独立使用它,我应该使用哪一个?
附带问题:有人可以使用$ min给我一个正确的语法来给我一个集合中最小的字段吗? db.the_collection.find().min({the_field:10})
不起作用。
答案 0 :(得分:1)
要获取该文档的最低值' the_field'你应该使用
db.the_collection.find().sort({the_field:1}).limit(1)
所以在这里,我们首先对文档进行排序,然后从查询中看到第一个文档。
聚合$ min:
当我们将文档分组到单个文档中时,我们会使用它,并且我们希望将此单个文档的值保持为所有文档的最小值。
$ min operator:
它用于特定索引的包含下限,以约束find()的结果。简单来说,如果the_field被索引并且我们想在find()上保留一些约束,那么我们就可以使用它。它通常用于改善性能
您输入的语法是正确的,但它需要一个Indexed字段,结果将与您实际想要的结果不同。
答案 1 :(得分:1)
因为min()需要字段上的索引,并强制查询使用此索引,即使可以获取更好的索引, 因此,如果可能,您必须更喜欢查询的$ gte或排序操作。
db.the_collection.find().sort({the_field:1}).limit(1)
所以上面的查询更好用的是比较$ min操作。
参考下面提到的链接。 http://docs.mongodb.org/manual/reference/operator/meta/min/#interaction-with-index-selection
在无索引键上运行min运算符时,它将给出以下错误
Error: error: {
"$err" : "Unable to execute query: error processing query: ns=db.dbName limit=0 skip=0\nTree: status == \"approved\"\nSort: {}\nProj: {}\n planner returned error: unable to find relevant index for max/min query",
"code" : 17007
}