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" }] }
);

Odpowiedzi:


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

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


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.