sql >> Database >  >> NoSQL >> MongoDB

Mongodb geaggregeerde query op specifieke records in plaats van verzameling

Gebruik de $match operator om de documenten die in uw pijplijn terechtkomen te filteren.

Download de lijst met bestel-ID's (te gebruiken in de $match pijplijn met $in ) met behulp van de find() cursor's map() methode:

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 } } }
])

Gebruik voor MongoDB 3.2 de $lookup operator die een left outer join doet met een niet-gecodeerde verzameling in dezelfde database om documenten uit de "samengevoegde" verzameling te filteren voor verwerking.

Het volgende voorbeeld laat zien hoe u de aggregatiebewerking kunt uitvoeren op de orders collectie samenvoegen van de documenten van orders met de documenten van de delivery ophalen met behulp van het veld order vanaf de delivery collectie:

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. Loopback-relaties vullen geen reeks object-ID's in

  2. ServiceStack.Net Redis:gerelateerde objecten opslaan versus gerelateerde object-ID's

  3. Kan geen project bouwen met mongodb c++ driver met MSVC

  4. node.JS Express paspoortroutering