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

Jawaban:


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

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


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.