Il framework di aggregazione MongoDB corrisponde a OR


96

È possibile eseguire un OR nella partita $?

Intendo qualcosa del genere:

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

Risposte:


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

In questo modo, poiché l' $matchoperatore prende solo ciò che normalmente inseriresti nella find()funzione


84

In questo caso particolare, dove si sta $or-ing lo stesso campo , l' $inoperatore dovrebbe essere una scelta migliore, anche perché aumenta la leggibilità:

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

Secondo la documentazione di MongoDB, $inin questo caso si consiglia di utilizzare :

$ o contro $ in

Quando si utilizza $ o con <espressioni> che sono controlli di uguaglianza per il valore dello stesso campo, utilizzare l'operatore $ in invece dell'operatore $ o.

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


1
Secondo Mongo docs, questo modo "più efficace" di farlo per confronti di uguaglianza come il tuo esempio. Vedi docs.mongodb.org/manual/reference/operator/query/or/#_S_or%22
Mark Gibaud

3
Il $ in è la strada da percorrere
blueskin

1
Credo che $ o non sia un operatore di aggregazione.
Paul Shapiro

@PaulShapiro: spero che tu non abbia votato per questo motivo. Per tutti, si prega di considerare di commentare il motivo prima di votare per difetto che aiuta tutti. Ecco gli operatori di aggregazione booleani di
Amol M Kulkarni

La tua risposta non è corretta e, come puoi vedere, ho già commentato spiegando dove e come la risposta non è corretta.
Paul Shapiro
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.