MongoDB toplama çerçevesi eşleşmesi VEYA


101

$ Eşleşmesinde OR yapmak mümkün mü?

Bunun gibi bir şey demek istiyorum:

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

Yanıtlar:


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

Aynı şekilde, $matchoperatör normalde find()işleve koyduğunuz şeyi aldığından


87

Eğer nerede bu özel durumda, $or-ing aynı alanı , $inoperatör okunabilirliği artırır nedeniyle de, daha iyi bir seçim olacaktır:

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

MongoDB belgelerine göre, $inbu durumda kullanılması önerilir:

$ veya $ in

Aynı alanın değerini eşitlik denetler olan $ veya <ifadeler> ile kullanırken, $ veya operatörü yerine $ in operatörünü kullanın.

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


1
Mongo belgelerine göre, örneğiniz gibi eşitlik karşılaştırmaları için bunu yapmanın bu "en etkili" yolu. Docs.mongodb.org/manual/reference/operator/query/or/#_S_or%22
Mark Gibaud'a

3
$
İn

1
$ Veya bir toplama operatörü olmadığını düşünüyorum.
Paul Shapiro

@PaulShapiro: Umarım bu yüzden oy vermediniz. Herkes için lütfen olumsuz oy kullanmadan önce nedeni yorumlamayı düşünün, bu herkese yardımcı olur. İşte referanstır Boole Toplama Operatörleri -> $ veya
Amol M Kulkarni

Cevabınız doğru değil ve gördüğünüz gibi cevabın nerede ve nasıl yanlış olduğunu açıklayarak zaten yorum yapmıştım.
Paul Shapiro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.