MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Mongodb zapytanie agregujące dotyczące określonych rekordów zamiast zbierania

Użyj $match operatora, aby filtrować dokumenty dostające się do potoku.

Pobierz listę identyfikatorów zamówień (do użycia w $match potok z $in ) przy użyciu find() kursor map() metoda:

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

W przypadku MongoDB 3.2 użyj $lookup operator, który wykonuje lewe zewnętrzne sprzężenie do nieshardowanej kolekcji w tej samej bazie danych w celu filtrowania dokumentów z „połączonej” kolekcji w celu przetworzenia.

Poniższy przykład pokazuje, jak można uruchomić operację agregacji na zamówieniach odbiór łączący dokumenty z zamówień z dokumentami z dostawy odbiór za pomocą pola zamówienie z dostawy kolekcja:

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. Jak połączyć stronę Laravel z atlasem mongoDB?

  2. Jak zaktualizować wartości tablicy mongodb

  3. $near zapytanie przez Javę

  4. MongoDB :kolejność indeksów i kolejność zapytań muszą być zgodne?

  5. PyMongo $inc ma problemy