sql >> Databasteknik >  >> NoSQL >> MongoDB

Kör kartreducering för alla nycklar i samlingar - mongodb

Att använda en karta/förminska för den enkla uppgiften är lite som att använda en (jämförelsevis långsam) slägga för att knäcka en nöt. aggregationsramverket uppfanns i grunden för den här typen av enkel aggregering (och kan göra mycket mer för dig!):

db.order.aggregate([
    { "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}},
    { "$out": "order_total"}
])

Beroende på ditt användningsfall kan du till och med utelämna $out steg och konsumerar resultaten direkt.

> db.orders.aggregate([{ "$group":{ "_id":"$customer", "orders":{ "$sum": 1 }}}])
{ "_id" : "b", "orders" : 2 }
{ "_id" : "a", "orders" : 3 }

Observera att med mycket stora samlingar är detta med största sannolikhet inte lämpligt, eftersom det tar ett tag (men det bör fortfarande vara snabbare än en kart-/reduceringsoperation).

För att hitta antalet beställningar för en enskild kund kan du använda en enkel fråga och använda cursor.count() metod:

> db.orders.find({ "customer": "a" }).count()
3



  1. hoppade över antal 0 i aggregatfunktion

  2. Hur gör jag skiftlägesokänsliga frågor på Mongodb?

  3. Finns det något sätt att skriva pyspark dataframe till azure cache för redis?

  4. redis Det verkar som om servern har stängt anslutningen