sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur kan jag få topp n hinkar för en aggregation och alla andra hinkar kombinerade till en annan hink?

Det du vill ha kallas viktning . För att göra det måste du lägga till en vikt till dina dokument med $project använda dem och använda $cond operatör, sortera dem sedan efter "vikt" i stigande annan och efter "inköpskvantitet" i fallande ordning.

db.collection.aggregate([
    { "$project": { 
        "purchasequantity": 1, 
        "w": { 
            "$cond": [ { "$eq": [ "$_id", "others" ] }, 1, 0 ] 
        } 
    }}, 
    { "$sort": { "w": 1, "purchasequantity": -1 } } 
])

Som returnerar:

{ "_id" : "customer100", "purchasequantity" : 4000000, "w" : 0 }
{ "_id" : "customer5", "purchasequantity" : 81800, "w" : 0 }
{ "_id" : "customer4", "purchasequantity" : 40900, "w" : 0 }
{ "_id" : "customer3", "purchasequantity" : 440, "w" : 0 }
{ "_id" : "customer1", "purchasequantity" : 300, "w" : 0 }
{ "_id" : "others", "purchasequantity" : 29999, "w" : 1 }



  1. Projicera resultat från MongoDb Hitta i F#

  2. Varför har MongoDB Node Driver-genererande instanspool förstört fel?

  3. Hur man installerar MongoDB 4.2 på RedHat/ CentOS 7-system

  4. Att avgöra varför Redis tar emot en SIGTERM varannan minut