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

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


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.