假设我有一个包含员工文档的MongoDB集合:
{
name : "John Doe",
department : "Finance",
salary : 100
}
如何查询每个部门薪资最高的X员工?
修改
为了让自己更清楚一点,这就是我想到的结果:
db.collection.aggregate(
{$sort : {salary : -1}},
{$group : {
_id : "$department"
employees : {$addToSet : "$name"}
},
{$project : {employees : {$slice : X}}}
)
但这不会有两个原因: 1. $ addToSet不保证输出集的任何排序(至少根据documentation) 2. $slice doesn't work in the aggregation framework。
答案 0 :(得分:1)
虽然它不是最佳性能,但您可以实现此返回集合,然后排序/接收代码。如果你想通过命令行来使用它,比如
db.collection.find({ Department : 'Sales' }).sort({Salary:-1}).limit(50)
应该有用。
答案 1 :(得分:0)
也许以下查询可以帮助您解决问题。
通过使用聚合查询,您可以先对数据进行排序,然后使用限制来限制所需薪水最高的用户数。最后,您可以按部门对用户进行分组。
db.test.aggregate(
{$sort : {salary : -1}},
{$limit : 5},
{$group : {_id:"$department", employees : {$addToSet : "$name"}}}
)