mongodb - 通过具有不同值的相同键对MongoDB集合进行排序

标签 mongodb sorting

我正在尝试查询我的 Mongo 数据库以显示某个集合中的所有值,并按某个键的所有值排序。例如,我有以下收藏:

{
  "id":"1235432",
  "name":"John Smith",
  "occupation":"janitor",
  "salary":"30000"
},
{
  "id":"23412312",
  "name":"Mathew Colins",
  "occupation":"janitor"
  "salary":"32000"
},
{
  "id":"7353452",
  "name":"Depp Jefferson",
  "occupation":"janitor"
  "salary":"33000"
},
{
  "id":"342434212",
  "name":"Clara Smith",
  "occupation":"Accountant",
  "salary":"45000"
},
{
  "id":"794563452",
  "name":"Jonathan Drako",
  "occupation":"Accountant",
  "salary":"46000"
},
{
  "id":"8383747",
  "name":"Simon Well",
  "occupation":"Accountant",
  "salary":"41000"
}

并且我试图只显示职业薪水最高的 TOP 2。我的查询目前看起来像这样:

Stats.find({occupation:{$exists:true}}).populate('name').sort({salary:1}).limit(2)

仅返回 1 个结果,而不是每个职业的一个结果。

How can I change my query to display the top 2 of each occupation by salary range?

最佳答案

您可以使用 $aggregate,如下所述。

 db.collectionName.aggregate({$match:{occupation:{$exists:true}}},
    { $sort: {"salary":-1}},
    { $limit: 2},
   { $project: {"name":1,"salary":1,_id:0} })

输出 JSON:

{"name" : "Jonathan Drako",
"salary" : "46000"},
{"name" : "Clara Smith",
"salary" : "45000"}

关于mongodb - 通过具有不同值的相同键对MongoDB集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55104859/

相关文章:

XSLT 排序与先行兄弟相结合::

C# MongoDB 驱动程序 copydb 管理员登录

ruby-on-rails - rails 3 : Migrate DB Schema from SQLite to MongoDB

arrays - Mongodb:查询嵌套在数组中的json对象

C++ 对两个成对整数数组的 "percentage"进行排序

linux - 如何对群组中的用户进行排序?

mongodb - Mongo $lookup 具有更多集合和空字段

java - 在 Spring Data MongoRepository 中为每个属性值选择 1 个项目

java - 使用比较器对列表列表进行排序

mysql - 在mysql中自定义排序依据 "%%"