Kerangka agregasi MongoDB cocok ATAU

96

Apakah mungkin melakukan OR di $ match?

Maksud saya seperti ini:

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

Jawaban:

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

Begitulah, karena $matchoperator hanya mengambil apa yang biasanya Anda masukkan ke dalam find()fungsi

Sammaye
sumber
85

Dalam kasus ini, di mana Anda $or-ing bidang yang sama , para $inoperator yang akan menjadi pilihan yang lebih baik, juga karena meningkatkan keterbacaan:

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

Menurut dokumen MongoDB, penggunaan $indisarankan dalam kasus ini:

$ atau versus $ in

Saat menggunakan $ atau dengan <expressions> yang merupakan pemeriksaan kesetaraan untuk nilai bidang yang sama, gunakan operator $ in sebagai ganti operator $ or.

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

Amol M Kulkarni
sumber
1
Menurut dokumen Mongo, cara "paling efektif" ini untuk melakukan perbandingan kesetaraan seperti contoh Anda. Lihat docs.mongodb.org/manual/reference/operator/query/or/#_S_or%22
Mark Gibaud
3
$ Masuk adalah cara untuk pergi
kulit biru
1
Saya percaya $ atau bukan operator agregasi.
Paul Shapiro
@PaulShapiro: Saya harap Anda tidak down karena ini. Untuk semua, mohon pertimbangkan untuk mengomentari alasan sebelum memilih down-voting, itu membantu semua orang. Berikut adalah referensi Operator Agregasi Boolean -> $ atau
Amol M Kulkarni
Jawaban Anda tidak benar, dan seperti yang Anda lihat, saya sudah berkomentar menjelaskan di mana dan bagaimana jawabannya salah.
Paul Shapiro