Załóżmy kolekcję o schemacie jak jak pokazano poniżej:Jak mogę zdobyć górne n segmentów dla agregacji i wszystkich innych segmentów połączonych w "inne" wiadro?
{
"customer" : <unique-id-for-customer>,
"purchase" : <number>,
}
Teraz chcę, aby uzyskać top 5 klientów (poprzez zakup-queantity) i 6. wiadro jest „inne”, która łączy w sobie wszystkie ilości zakupu od innych klientów.
Zasadniczo wyjście agregacji powinna być jak:
{ "_id" : "customer100", "purchasequantity" : 4000000 }
{ "_id" : "customer5", "purchasequantity" : 81800 }
{ "_id" : "customer4", "purchasequantity" : 40900 }
{ "_id" : "customer3", "purchasequantity" : 440 }
{ "_id" : "customer1", "purchasequantity" : 300 }
{"_id" : "others", "purchasequantity" : 29999}
myślę, że to nie jest możliwe za pomocą jednego polecenia agregacji. – dikesh
Ja też próbowałem wszystkiego, co mogłem .. nie mogłem wymyślić sposobu na odzyskanie wyników w jednym poleceniu. db.aggregations.aggregate ([{$ sort: {purchasequantity: -1}}, {$ limit: 5}]); i db.aggregations.aggregate ([{$ sort: {purchasequantity: -1}}, {$ skip: 5}, {$ group: {_ id: "others", totalAmount: {$ sum: '$ buyquantity'}} }]); wyniki muszą zostać połączone. – harshavmb
Pierwszy Aggregation: db.test.aggregate ([ \t { \t \t "$ sort": { "zakup": -1} \t} \t { \t \t "$ projekt": { \t \t \t _id: '$ klienta, \t \t \t 'zakup': 1 \t \t} \t} \t { \t \t $ granica: 5 \t} ]) drugiej Agregacja: db.test.aggregate ([ \t { \t \t "$ sortowania" { "zakupu" -1} \t} \t { \t \t $ pominąć: 5 \t}, \t { \t \t "$ grupę": { \t \t \t _id: 'pozostałe' \t \t \t 'zakup': {$ suma: "$ zakup"} \t \t} \t} ]) – dikesh