Skip to content

Instantly share code, notes, and snippets.

@asya999
Created July 19, 2017 19:36
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/abd5c0de8742e33b5ffaf12269018e23 to your computer and use it in GitHub Desktop.
Save asya999/abd5c0de8742e33b5ffaf12269018e23 to your computer and use it in GitHub Desktop.
aggregation helper function
rankArray=function(inputArray, sortField="", dense=false) {
let suffix = "";
if (sortField!="") {
suffix = "."+sortField;
};
let orderVar = {};
if (dense) {
orderVar = {$cond:[
{$ne:["$$this"+suffix, "$$value.prevVal"]},
{$add:["$$value.order", 1]},
"$$value.order"
]};
} else {
orderVar = {$add:["$$value.order",1]};
}
var red = {$reduce:{
input:inputArray,
initialValue: {a:[ ],order:0, prevRank:undefined,prevVal:undefined},
in: {$let:{
vars: {
order: orderVar,
rank: {$cond:[
{$ne:["$$this"+suffix, "$$value.prevVal"]},
{$add:["$$value.order", 1]},
"$$value.prevRank"
]}
},
in:{
a:{$concatArrays:["$$value.a", [{$mergeObjects:["$$this", {rank:"$$rank"}]}]]},
prevVal: "$$this"+suffix,
order: "$$order",
prevRank:"$$rank"
}
} }
}};
return {$let:{
vars: { extract:red },
in: "$$extract.a"
}};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment