sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb aggregeret forespørgsel på specifikke poster i stedet for samling

Brug $match operatør til at filtrere de dokumenter, der kommer ind i din pipeline.

Hent listen over ordre-id'er (til brug i $match pipeline med $in ) ved at bruge find() markørens kort() metode:

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

Til MongoDB 3.2 skal du bruge $lookup operatør, der laver en venstre ydre joinforbindelse til en ikke-delt samling i den samme database for at filtrere dokumenter fra den "joined" samling ind til behandling.

Følgende eksempel viser, hvordan du kan køre aggregeringsoperationen på ordrerne samling, der slutter sig til dokumenterne fra ordrer med dokumenterne fra leveringen samling ved hjælp af feltet ordre fra leveringen 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. MongoDB:Unikt indeks på array-elementets egenskab

  2. ServerSelectionTimeoutError fejl 11001 getaddriinfo mislykkedes python

  3. MongoDB+Azure+Android:Fejl:com.mongodb.MongoException:taler ikke med master og genforsøg brugt op

  4. Få sættet af alle unikke værdier i matrixfeltet