MongoDB-Aggregationsframework stimmt mit OR überein

96

Ist es möglich, im $ -Match ein ODER durchzuführen?

Ich meine so etwas:

db.articles.aggregate(
    { $or: [ $match : { author : "dave" }, $match : { author : "john" }] }
);
Gergely Németh
quelle

Antworten:

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

So, da der $matchOperator nur das nimmt, was Sie normalerweise in die find()Funktion einfügen würden

Sammaye
quelle
84

In diesem speziellen Fall, wo Sie $or-ing das gleiche Feld , das $inwürde Operator eine bessere Wahl sein, auch , weil es die Lesbarkeit erhöht:

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

In den MongoDB-Dokumenten $inwird in diesem Fall die Verwendung empfohlen:

$ oder versus $ in

Wenn Sie $ oder mit <Ausdrücken> verwenden, bei denen es sich um Gleichheitsprüfungen für den Wert desselben Felds handelt, verwenden Sie den Operator $ in anstelle des Operators $ oder.

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

Amol M Kulkarni
quelle
1
Laut Mongo-Dokumenten ist dies die "effektivste" Methode, um Gleichheitsvergleiche wie Ihr Beispiel durchzuführen. Siehe docs.mongodb.org/manual/reference/operator/query/or/#_S_or%22
Mark Gibaud
3
Das $ in ist der
richtige
1
Ich glaube, $ oder ist kein Aggregationsoperator.
Paul Shapiro
@PaulShapiro: Ich hoffe, Sie haben deswegen nicht abgestimmt. Bitte denken Sie für alle daran, den Grund zu kommentieren, bevor Sie abstimmen. Dies hilft allen. Hier ist die Referenz Boolean Aggregation Operators -> $ oder
Amol M Kulkarni
Ihre Antwort ist nicht korrekt, und wie Sie sehen können, habe ich bereits kommentiert, wo und wie die Antwort falsch ist.
Paul Shapiro