यह कैसे जांचा जाए कि सरणी फ़ील्ड में कोई विशिष्ट मान या MongoDB में कोई अन्य सरणी है?


143

मैं अब मोंगोडब का उपयोग कर रहा हूं।

मेरे पास ब्लॉगपोस्ट संग्रह है, और ब्लॉगपोस्ट में एक टैग दर्ज है जो एक सरणी है, उदाहरण के लिए

blogpost1.tags = ['tag1', 'tag2', 'tag3', 'tag4', 'tag5']
blogpost2.tags = ['tag2', 'tag3']
blogpost3.tags = ['tag2', 'tag3', 'tag4', 'tag5']
blogpost4.tags = ['tag1', 'tag4', 'tag5']

मैं ये खोज कैसे कर सकता हूं

  1. 'tag1' शामिल है
  2. इसमें ['tag1', 'tag2'],
  3. ['tag3', 'tag4'] में से कोई भी शामिल है

जवाबों:


219

इसे आज़माएं:

db.blogpost.find({ 'tags' : 'tag1'}); //1
db.blogpost.find({ 'tags' : { $all : [ 'tag1', 'tag2' ] }}); //2
db.blogpost.find({ 'tags' : { $in : [ 'tag3', 'tag4' ] }}); //3

6
यह मदद में अच्छी तरह से प्रलेखित है: mongodb.org/display/DOCS/…
स्कॉट

2
$ सभी के लिए इसका मतलब सभी तत्वों और व्यक्त क्रम में है या यह सिर्फ अव्यवस्थित है?
रेड

2
@ScottHernandez मैं यह नहीं देखता कि वे उल्लेख करते हैं कि जिस क्षेत्र का आप अपनी खोज के रूप में उपयोग कर रहे हैं वह एक सरणी हो सकता है, और यह भी कि कैसे संभाला जाता है। "फ़ील्ड: {$ in: array}"। जब आप किसी सरणी में सरणी के लिए खोज करते हैं तो क्या होता है? निर्दिष्ट नहीं है।
ज़ुत

क्या कोई ऐसा इंडेक्सिंग है जो हम डुप्लिकेट को रोकने के लिए सरणी पर कर सकते हैं? यदि हाँ, तो कृपया मार्गदर्शन करें कि कैसे।
हितेश जोशी

1
@redben डॉक्स में लिखे गए अपने अप्रतिबंधित: $ सभी ऑपरेटर डॉक्स । केवल उदाहरण भाग पढ़ें और आप देखेंगे।
मथायस बी

5

मेरा अनुभव है कि (2) निम्नलिखित समाधान "$ सभी" के साथ की तुलना में बहुत तेज है:

db.blogpost.find({ $and: [ {tags: 'tag1'} ,{tags: 'tag2'} ] });

लेकिन ईमानदारी से कहूं तो मैं ऐसा नहीं करता। मुझे दिलचस्पी होगी, अगर किसी को पता है।


1
वैसे, बस इसे अनुक्रमित कीवर्ड सूची पर परीक्षण किया गया है। $ और $ सभी के साथ बिल्कुल समान परिणाम
isox

हो सकता है कि इस बीच नए संस्करणों के साथ बदल गया।
हेनोब

यह परिस्थितिजन्य है। "$ और" के लिए, मोंगोडब एक तार्किक बनाते हैं "और" ऑपरेशन। इसलिए यदि पहली अभिव्यक्ति झूठी है, तो दूसरे पर ध्यान नहीं दिया जाता है। इसका मतलब है कम प्रसंस्करण।
कुबुदी

लेकिन यह '$ सभी' के साथ भी होना चाहिए, यह नहीं होना चाहिए !?
हेनोब

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