2012-08-31 15 views
6

मेरे पास फ़ील्ड _keywords है जो तारों की एक सरणी है। मैं दस्तावेज प्राप्त करना चाहता हूं जिसमें _keywords क्वेरी सरणी का सुपर-सेट है।एक सरणी के mongodb क्वेरी सबसेट

उदाहरण के लिए:

db.article.insert({'_keywords': ['foo', 'foo1', 'foo2']}) 

मैं जब मैं [ 'foo', 'foo1', 'foo2'], जैसे के सबसेट क्वेरी इस रिकॉर्ड पुनर्प्राप्त करना चाहते हैं: [ 'foo'], [ 'foo1 ',' foo2 ']

संपादित करें: कुछ की तरह:

db.article.find({'_keywords': {$contains: array}}) 

उत्तर

11

उपयोग $all ऑपरेटर:

db.article.find({ _keywords: { $all: [ 'foo1', 'foo2' ] } }); 

स्रोत: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24all

+0

जहां '_keywords कैसे पुनर्प्राप्त दस्तावेजों को 'दिए गए क्वेरी सरणी में कोई आइटम शामिल है। कुछ ऐसा: 'db.article.find ({_ कीवर्ड: {$ any: ['foo1', 'foo2']}}} ', जो _keywords के साथ किसी दस्तावेज़ को वापस करता है' foo1 'या' foo2 ' – Jensen

+1

जैसा कि मुझे याद है , इस तरह के मामले में आप '$ in' का उपयोग कर सकते हैं, उदाहरण के लिए:' db.article.find ({_ कीवर्ड: {$ इन: ['foo1', 'foo2']}})। जांचें कि यह सही है या नहीं। – Dmitry

+0

सही, धन्यवाद। – Jensen

1

लघु जवाब: $all ऑपरेटर।
[ 'foo1', 'foo2'] के सुपरसेट के साथ सरणी के साथ दस्तावेजों को क्वेरी करने के लिए, का उपयोग करें:
db.article.find({ '_keywords': { $all: ['foo1', 'foo2'] } });

5

MongoDB में, सरणी क्षेत्र के लिए:

"$in:[...]" means "intersection" or "any element in", 
"$all:[...]" means "subset" or "contain", 
"$elemMatch:{...}" means "any element match" 
"$not:{$elemMatch:{$nin:[...]}}" means "superset" or "in"