Struktura agregacji MongoDB pasuje do operatora OR

96

Czy jest możliwe wykonanie OR w meczu $?

Mam na myśli coś takiego:

db.articles.aggregate(
    { $or: [ $match : { author : "dave" }, $match : { author : "john" }] }
);
Gergely Németh
źródło

Odpowiedzi:

168
$match: { $or: [{ author: 'dave' }, { author: 'john' }] }

Tak, ponieważ $matchoperator bierze tylko to, co normalnie wstawiłbyś do find()funkcji

Sammaye
źródło
85

W tym konkretnym przypadku, w którym są $or-ing tego samego pola The $inoperator byłby lepszym wyborem, również dlatego, że zwiększa czytelność:

$match: { 
  'author': { 
    $in: ['dave','john'] 
  } 
}

Zgodnie z dokumentacją MongoDB $inw tym przypadku zalecane jest użycie:

$ lub w porównaniu z $ in

W przypadku używania znaku $ lub z <expressions>, które sprawdzają równość wartości tego samego pola, użyj operatora $ in zamiast operatora $ or.

https://docs.mongodb.com/manual/reference/operator/query/or/#or-versus-in

Amol M Kulkarni
źródło
1
Według dokumentacji Mongo jest to „najbardziej efektywny” sposób robienia tego w celu porównania równości, takiego jak na przykładzie. Zobacz docs.mongodb.org/manual/reference/operator/query/or/#_S_or%22
Mark Gibaud,
3
$
In
1
Uważam, że $ lub nie jest operatorem agregacji.
Paul Shapiro,
@PaulShapiro: Mam nadzieję, że nie przegłosowałeś z tego powodu. Dla wszystkich prosimy o rozważenie komentarza przed głosowaniem negatywnym, pomoże to wszystkim. Oto odniesienie Operatory agregacji logicznej -> $ lub
Amol M Kulkarni
Twoja odpowiedź nie jest poprawna i jak widzisz, już skomentowałem, wyjaśniając, gdzie i jak odpowiedź jest nieprawidłowa.
Paul Shapiro