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

MongoDB, wielokrotne zliczanie (z $exists)

Miałeś dobry podstawowy pomysł, ale $exists jest warunkiem zapytania, więc obowiązuje tylko w przypadku $match . To, czego potrzebujesz, to $ifNull operatora, aby zasadniczo zrobić to samo:

db.mycollection.aggregate( [
    { "$group": {
        "_id" : { "user_id": "$user_id" },
        "requestA_count": { "$sum": {
            "$cond": [ { "$ifNull": ["$requestA", false] }, 1, 0 ]
        } },
        "requestB_count": { "$sum": {
            "$cond": [ { "$ifNull": ["$requestB", false] }, 1, 0 ]
        } },
        "requestC_count": { "$sum": {
            "$cond": [ { "$ifNull": ["$requestC", false] }, 1, 0 ]
        } },
    } },
    { "$project": {
        "_id": 0,
        "user_id": "$_id.user_id",
        "requestA_count": 1,
        "requestB_count": 1,
        "requestC_count": 1
    } }
] );

Tak więc $ifNull albo zwraca bieżącą wartość pola, jeśli istnieje, albo zwracany jest argument „prawa strona”, jeśli nie. Zwrócona wartość inna niż false jest interpretowany jako prawdziwy (chyba że oczywiście wartość jest fałszywa).

Zasadniczo daje to tę samą funkcjonalność logicznego testowania istnienia właściwości w dokumencie.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak znaleźć w mongodb do ostatniego elementu tablicy?

  2. Błąd podczas ładowania plików konfiguracyjnych YAML w Rails

  3. Jak wstawić dane do kolekcji mongodb przy użyciu sterownika c# 2.0?

  4. Spring data mongodb zapytanie o pole poddokumentu

  5. Nie udało się uruchomić instalacji Mongodb mongod