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

Konkretny miesiąc zapytania Mongodb | rok nie data

W MongoDB 3.6 i nowszych możesz użyć $expr operator w find() zapytanie. Pozwala to na tworzenie wyrażeń zapytań, które porównują pola z tego samego dokumentu w $match scena.

db.customer.find({ "$expr": { "$eq": [{ "$month": "$bday" }, 9] } })

W przypadku innych wersji MongoDB rozważ uruchomienie potoku agregacji, który używa $redact operatora, ponieważ pozwala na włączenie do jednego potoku funkcji z $project aby utworzyć pole reprezentujące miesiąc pola daty i $match do filtrowania dokumentów, które pasują do danego miesiąca września.

W powyższym, $redact używa $cond operator tenarny jako środek do dostarczenia wyrażenia warunkowego, które utworzy zmienną systemową, która wykonuje redakcję. Wyrażenie logiczne w $cond sprawdzi równość pola operatora daty z podaną wartością, jeśli to pasuje, to $redact zwróci dokumenty za pomocą $$KEEP zmienna systemowa i odrzuca w inny sposób za pomocą $$PRUNE .

Uruchomienie następującego potoku powinno dać pożądany rezultat:

db.customer.aggregate([
    { "$match": { "bday": { "$exists": true } } },
    {
        "$redact": {
            "$cond": [
                { "$eq": [{ "$month": "$bday" }, 9] },
                "$$KEEP",
                "$$PRUNE"
            ]
        }
    }
])

Jest to podobne do $project +$match combo, ale musisz wtedy zaznaczyć wszystkie pozostałe pola, które trafiają do potoku:

db.customer.aggregate([
    { "$match": { "bday": { "$exists": true } } },
    {
        "$project": {
            "month": { "$month": "$bday" },
            "bday": 1,
            "field1": 1,
            "field2": 1,
            .....
        }
    },
    { "$match": { "month": 9 } }
])

Z inną alternatywą, aczkolwiek powolnym zapytaniem, używając find() metoda z $where jako:

db.customer.find({ "$where": "this.bday.getMonth() === 8" })


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. zapytanie mongodb bez nazwy pola

  2. pymongo — moduł dnspython musi być zainstalowany, aby można było używać identyfikatorów URI mongodb+srv://

  3. Jak ograniczyć liczbę aktualizacji dokumentów w mongodb

  4. Mongoose TypeError:użytkownik nie jest konstruktorem

  5. mangusta wyjątkowa:prawda nie działa