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.