2013-02-06 11 views
5

Wdrażanie aplikacji, która wyszukuje tabelę dla obecności identyfikatora poczty z listy około 10 e-maili. Próbowałem za pomocą $ or i $ in.

Wydaje się, że $ in daje lepsze wyniki, ale nie ma znaczenia. Czy jeden jest bardziej zoptymalizowany niż inne?

+3

Cóż, na początek, $ in przyjmuje tylko jeden indeks, co jest znaczące z powodu powodu, dla którego $ lub ma więcej (po jednym w klauzuli). $ Lub jest jak otrzymywanie wyniku dla każdej klauzuli, a następnie łączenie duplikatów i zwracanie wyniku. Jest to jeden z głównych punktów do rozważenia, podczas gdy $ in to identyfikator zakresu. Zgodnie z prawami informatyki powiedziałbym, że jeśli można użyć $ w to byłoby bardziej zoptymalizowane niż $ lub – Sammaye

Odpowiedz

15

MongoDB docs mają the answer:

„Podczas korzystania z < $ lub wyrażeń > że są sprawdza równość wartości tej samej dziedzinie, wybrać operatora $ w ciągu $ lub operatora.”

1

"Podczas gdy" $ lub "zawsze będzie działać, używaj" $ in ", kiedy tylko jest to możliwe, ponieważ optymalizator zapytań radzi sobie z nim bardziej efektywnie."

Co więcej "$ in" ma większą czytelność.

Ref: MongoDB: The Definitive Guide

0

$or operator jest operator logiczny, w którym można zdefiniować własną logowanie ale $in operator operator Porównanie gdzie można porównać nie można umieścić na swojej logiki.

Składnia $in:

{ field: { $in: [<value1>, <value2>, ... <valueN> ] } } 

przykład:

db.account.find({ qty: { $in: [ 5, 15 ] } }) 

Składnia $or:

{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] } 

przykład:

db.account.find({ $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] }) 

Uwaga: Konto to nazwa kolekcji

Powiązane problemy