我想知道按某个字段的最大值过滤Mongo Collection的最佳方法。如果要在SQL中执行相同的操作,则将应用以下查询。
select * from tableName where column1 in (select max(column1) from tableName)
给出以下示例输入和输出学生。在此,输入数据集将使用StudentAge的最大值进行过滤。
输入
_id StudentName StudentAge
1 John 15
2 David 16
3 Miller 15
4 Mike 16
5 Graham 16
输出
_id StudentName StudentAge
2 David 16
4 Mike 16
5 Graham 16
我尝试查找有关SO的各种问题,但无法找到与我的问题相匹配的任何内容。我正在使用Mongo Compass来查询Mongo集合。
答案 0 :(得分:1)
尽管有一些解决方法,但在MongoDB中没有做到这一点的直接方法。
方法-1:
实现此目标的一种方法是使用MongoDB聚合查询:
db.<Collection-Name>.aggregate([
{
"$group": {
"_id": "$<Key-Name>",
"documents": {"$push": "$$ROOT"}
}
},
{
"$sort": {
"_id": -1
}
},
{
"$limit": 1
},
{
"$unwind": "$documents"
},
{
"$replaceRoot": { newRoot: "$documents" }
},
])
用适当的值修改
<Collection-Name>
和<Key-Name>
。
不建议使用此方法,特别是如果MongoDB集合中包含大量记录的话。
方法-2:
第二种方法是使用传统的MongoDB find方法(尽管它涉及两个find命令。
var recordWithMaxValue = db.<Collection-Name>.find({}, {"<Key-Name>": 1}).sort({"<Key-Name>": -1}).limit(1); // Init Cursor
db.<Collection-Name>.find({"<Key-Name>": recordWithMaxValue.next()["<Key-Name>"]}); // Get records with Max. value
与第一种方法相比,更推荐使用此方法。
请指出是否有更好的解决方案