sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb aggregerad fråga på specifika poster istället för samling

Använd $match operatör för att filtrera dokumenten som kommer in i din pipeline.

Hämta listan med beställnings-ID (att använda i $match pipeline med $in ) genom att använda find() markörens karta() metod:

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

För MongoDB 3.2, använd $lookup operatör som gör en vänster yttre koppling till en odelad samling i samma databas för att filtrera in dokument från den "anslutna" samlingen för bearbetning.

Följande exempel visar hur du kan köra aggregeringsoperationen på order samling som går med i dokumenten från order med dokumenten från leverans samling med fältet order från leveransen samling:

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. sortera efter inbäddat objektvärde i Mongodb

  2. Mongodb-fråga baserad på objekt vid specifik position i arrayen

  3. Microsoft.Extensions.Caching.Redis väljer en annan databas än db0

  4. Fjäderdata MongoDb:MappingMongoConverter remove _class