sql >> Databáze >  >> NoSQL >> MongoDB

Agregační dotaz Mongodb na konkrétní záznamy namísto kolekce

Použijte $match operátora pro filtrování dokumentů, které se dostanou do vašeho kanálu.

Získejte seznam ID objednávek (k použití v $match potrubí s $in ) pomocí find() kurzor map() metoda:

var orderIds = db.delivery.find({"status": "DELIVERED"}).map(function(d){return d.order;});
db.orders.aggregate([
    { "$match": { "_id": { "$in": orderIds } } },
    { "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])

Pro MongoDB 3.2 použijte $lookup operátor, který provede levé vnější spojení s neshardovanou sbírkou ve stejné databázi za účelem filtrování dokumentů ze „připojené“ kolekce ke zpracování.

Následující příklad ukazuje, jak můžete spustit operaci agregace na objednávkách kolekce spojující dokumenty z objednávek s dokumenty z doručení odběr pomocí pole objednávka z doručení kolekce:

db.orders.aggregate([
    {
        "$lookup": {
            "from": "delivery",
            "localField": "_id",
            "foreignField": "order",
            "as": "delivery_orders"
        }
    },
    { "$match": { "delivery_orders.status": "DELIVERED" } },    
    { "$group": { "_id": "$customer", "orders": { "$sum": 1 } } }
])



  1. V Mongodb, Jak mohu indexovat pole (pole) v kolekcích pouze v sekundárním uzlu (sadě replik)

  2. osvědčený postup pro synchronizaci dat v nodejs

  3. Mongodb:Použijte počet záznamů v agregaci po skupině

  4. MongoDB:Časový limit nastal po 30 000 ms při výběru serveru pomocí CompositeServerSelector