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

Zapytanie agregujące w Mongodb zwraca określone pole

Pierwszą rzeczą, którą robisz źle, jest niezrozumienie, jak $project ma działać. Etapy potoku, takie jak $project i $group wyprowadzi tylko pola, które są "jawnie" zidentyfikowane. Tak więc tylko pola, które powiesz do wyjścia, będą dostępne dla następujących etapów potoku.

W szczególności tutaj „projektujesz” tylko część pola „u” w swoim dokumencie, a zatem usuwasz inne dane z dostępnych. Jedynym obecnym polem tutaj jest teraz „imię”, które jest tym, które „zaprojektowałeś”.

Być może naprawdę chciałeś zrobić coś takiego:

db.collectiontmp.aggregate([
    { "$group": {
        "_id": {
           "_id": "$u._id",
           "email": { "$toUpper": "$u.e" }
        },
        "total": { "$sum": 1 },
    }},
    { "$project": {
        "_id": 0,
        "email": "$_id.email",
        "total": 1
    }},
    { "$sort": { "total": -1 } },
    { "$limit": 10 }
])

Lub nawet:

db.collectiontmp.aggregate([
    { "$group": {
        "_id": "$u._id",
        "email": { "$first": { "$toUpper": "$u.e" } }
        "total": { "$sum": 1 },
    }},
    { "$project": {
        "_id": 0,
        "email": 1,
        "total": 1
    }},
    { "$sort": { "total": -1 } },
    { "$limit": 10 }
])

Daje to rodzaj wyjścia, którego szukasz.

Pamiętaj, że ponieważ jest to „potok”, to tylko „wyjście” z poprzedniego etapu jest dostępne dla „następnego” etapu. Nie ma „globalnej” koncepcji dokumentu, ponieważ nie jest to deklaratywna instrukcja, taka jak w SQL, ale „potok”.

Pomyśl więc uniksowy potok "|" polecenie lub w inny sposób to sprawdzić. Wtedy twoje myślenie się ułoży.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo przesuń do tablicy wewnątrz tablicy

  2. Jak grupować rekordy na podstawie elementów tablicy za pomocą MongoDB?

  3. Node.js, MongoDB - Wstawianie/aktualizowanie wielu dokumentów i wysyłanie jednej odpowiedzi

  4. MongoDb — Jak zaktualizować wiele elementów zagnieżdżonego obiektu za pomocą $set?

  5. nie można uruchomić kontenera mongoDb w dockerze dla systemu Windows przy użyciu systemu plików linux