Skip to content

Instantly share code, notes, and snippets.

@asya999
Created July 19, 2017 19:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save asya999/60c56251e5ea42e6063d91635aab3e5e to your computer and use it in GitHub Desktop.
Save asya999/60c56251e5ea42e6063d91635aab3e5e to your computer and use it in GitHub Desktop.
Example using rankArray
> db.ranks.find()
{ "_id" : ObjectId("596f6e95b6a1aa8d363befeb"), "emp" : "xxx", "deptno" : 10 }
{ "_id" : ObjectId("596f6ea5b6a1aa8d363befec"), "emp" : "rrr", "deptno" : 10, "salary" : 10000 }
{ "_id" : ObjectId("596f6eacb6a1aa8d363befed"), "emp" : "fff", "deptno" : 10, "salary" : 40000 }
{ "_id" : ObjectId("596f6eb4b6a1aa8d363befee"), "emp" : "ddd", "deptno" : 10, "salary" : 40000 }
{ "_id" : ObjectId("596f6ebcb6a1aa8d363befef"), "emp" : "ccc", "deptno" : 10, "salary" : 50000 }
{ "_id" : ObjectId("596f6ec9b6a1aa8d363beff0"), "emp" : "bbb", "deptno" : 10, "salary" : 50000 }
{ "_id" : ObjectId("596f6ed7b6a1aa8d363beff1"), "emp" : "mmm", "deptno" : 11, "salary" : 5000 }
{ "_id" : ObjectId("596f6ee1b6a1aa8d363beff2"), "emp" : "nnn", "deptno" : 11, "salary" : 20000 }
{ "_id" : ObjectId("596f6eebb6a1aa8d363beff3"), "emp" : "kkk", "deptno" : 12, "salary" : 30000 }
> db.ranks.aggregate([
{$sort:{deptno:1, salary:-1}},
{$group:{_id:"$deptno", empBySalary:{$push:{emp:"$emp", sal:"$salary"}}}},
{$addFields:{empBySalary:rankArray("$empBySalary","sal")}}
])
{ "_id" : 12, "empBySalary" : [ { "emp" : "kkk", "sal" : 30000, "rank" : 1 } ] }
{ "_id" : 11, "empBySalary" : [ { "emp" : "nnn", "sal" : 20000, "rank" : 1 }, { "emp" : "mmm", "sal" : 5000, "rank" : 2 } ] }
{ "_id" : 10, "empBySalary" : [ { "emp" : "ccc", "sal" : 50000, "rank" : 1 }, { "emp" : "bbb", "sal" : 50000, "rank" : 1 }, { "emp" : "fff", "sal" : 40000, "rank" : 3 }, { "emp" : "ddd", "sal" : 40000, "rank" : 3 }, { "emp" : "rrr", "sal" : 10000, "rank" : 5 }, { "emp" : "xxx", "rank" : 6 } ] }
> db.ranks.aggregate([
{$sort:{deptno:1, salary:-1}},
{$group:{_id:"$deptno", empBySalary:{$push:{emp:"$emp", sal:"$salary"}}}},
{$addFields:{empBySalary:rankArray("$empBySalary","sal",dense=true)}}
])
{ "_id" : 12, "empBySalary" : [ { "emp" : "kkk", "sal" : 30000, "rank" : 1 } ] }
{ "_id" : 11, "empBySalary" : [ { "emp" : "nnn", "sal" : 20000, "rank" : 1 }, { "emp" : "mmm", "sal" : 5000, "rank" : 2 } ] }
{ "_id" : 10, "empBySalary" : [ { "emp" : "ccc", "sal" : 50000, "rank" : 1 }, { "emp" : "bbb", "sal" : 50000, "rank" : 1 }, { "emp" : "fff", "sal" : 40000, "rank" : 2 }, { "emp" : "ddd", "sal" : 40000, "rank" : 2 }, { "emp" : "rrr", "sal" : 10000, "rank" : 3 }, { "emp" : "xxx", "rank" : 4 } ] }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment