MongoDB एकत्रीकरण रूपरेखा मैच OR


96

क्या $ मैच में OR करना संभव है?

मेरा मतलब कुछ इस तरह है:

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

जवाबों:


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

ऐसा ही है, चूंकि $matchऑपरेटर सिर्फ वही लेता है जो आप आमतौर पर find()फ़ंक्शन में डालते हैं


84

इस विशेष मामले में, जहाँ आप कर रहे हैं $orआईएनजी एक ही क्षेत्र , $inऑपरेटर एक बेहतर विकल्प हो सकता है, इसलिए भी कि यह पठनीयता को बढ़ाता है:

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

MongoDB डॉक्स के अनुसार, $inइस मामले में उपयोग करने की अनुशंसा की जाती है:

$ या बनाम $ में

$ का उपयोग करते समय या <भाव> के साथ समान फ़ील्ड के मान के लिए समानता की जांच कर रहे हैं, $ या ऑपरेटर के बजाय ऑपरेटर में $ का उपयोग करें।

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


1
Mongo डॉक्स के अनुसार, समानता उदाहरण के लिए ऐसा करने का यह "सबसे प्रभावी" तरीका है जैसे कि आपका उदाहरण। Docs.mongodb.org/manual/reference/operator/query/or/#_S_or%22
मार्क

3
$ जाने का रास्ता है
ब्लूज़किन

1
मेरा मानना ​​है कि $ या एकत्रीकरण ऑपरेटर नहीं है।
पॉल शापिरो

@PaulShapiro: मुझे उम्मीद है कि आपने इसकी वजह से मतदान नहीं किया। सभी के लिए कृपया वोट देने से पहले कारण पर टिप्पणी करने पर विचार करें इससे सभी को मदद मिलती है। यहाँ संदर्भ बूलियन एकत्रीकरण ऑपरेटरों -> $ या
अमोल एम कुलकर्णी

आपका उत्तर सही नहीं है, और जैसा कि आप देख सकते हैं, मैंने पहले से ही यह समझाते हुए टिप्पणी की कि उत्तर कहाँ और कैसे गलत है।
पॉल शापिरो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.