MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongodb обобщена заявка за конкретни записи вместо колекция

Използвайте $match оператор за филтриране на документите, влизащи във вашия конвейер.

Вземете списъка с идентификатори на поръчки (за използване в $match конвейер с $in ) с помощта на find() map() на курсора метод:

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

За MongoDB 3.2 използвайте $lookup оператор, който прави ляво външно присъединяване към неразделена колекция в същата база данни, за да филтрира документи от „присъединената“ колекция за обработка.

Следващият пример показва как можете да изпълните операцията за агрегиране на поръчките събиране на документи от поръчки с документите от доставката събиране с помощта на полето order от доставката колекция:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $gte Оператор на конвейер за агрегиране

  2. Създаване на цял модел само за четене с Mongoid

  3. Как да свържете php7 с mongoDB

  4. Как работи обратното извикване за запазване на Mongoose?

  5. Неуспешно удостоверяване на Python Pymongo