sql >> Base de Datos >  >> NoSQL >> MongoDB

Consulta agregada de Mongodb en registros específicos en lugar de colección

Use el $match operador para filtrar los documentos que ingresan a su tubería.

Obtenga la lista de ID de pedido (para usar en $match tubería con $in ) usando find() cursor map() método:

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

Para MongoDB 3.2, utilice el $lookup operador que realiza una unión externa izquierda a una colección no fragmentada en la misma base de datos para filtrar documentos de la colección "unida" para su procesamiento.

El siguiente ejemplo muestra cómo puede ejecutar la operación de agregación en los orders colección que une los documentos de orders con los documentos de la delivery colección usando el campo order de la delivery colección:

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