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

mongodb $where zapytanie do pobrania treści poddokumentu

Korzystanie z $where W większości przypadków należy unikać operatora, ponieważ oba wywołają pełne skanowanie kolekcji bez względu na to, jakie inne warunki mogłyby ewentualnie wykorzystać wybór indeksu.

Dodatkowo wywołujesz interpreter JavaScript nad każdym dokumentem wynikowym, który będzie znacznie wolniejszy niż kod natywny. Przeczytaj ostrzeżenia na stronie podręcznika, są tam z jakiegoś powodu

Jeśli to możliwe, spróbuj użyć .aggregate() dla tego typu porównania zamiast. W Twoim przypadku jest to zdecydowanie lepsza opcja:

db.foo.aggregate([
    { "$match": { "flag": true } },
    { "$unwind": "$versions" },
    { "$project": {
        "versions": "$versions"
        "same": { "$eq": [ "$versions.version", "$defaultVersion" ] }
    }}
    { "$match": { "same": true } },
    { "$project": {
        "_id": 0,
        "versions": 1
    }}
])

Pozwala to najpierw przefiltrować zapytanie według warunku „flaga”, a następnie sprawdzić każdy element tablicy w celu porównania, czy oba pola są takie same.

Jeśli to konieczne, możesz następnie przywrócić dopasowane elementy tablicy do tablicy, w której jest więcej niż jedno dopasowanie. Ale nie sądzę, żeby to było twoje wymaganie.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak skonfigurować indeksy mongoDB w django-nonrel bez używania modeli?

  2. agregacja mongodb z $projektem do warunkowego wykluczenia pola

  3. Przyczyna:org.bson.BsonInvalidOperationException:nieprawidłowy stan INITIAL

  4. jak ustawić mogodb w usłudze upstart z uwierzytelnianiem

  5. [Infografika] Porównanie Cassandry i MongoDB