2012-04-07 27 views
15

मैंने कुछ दस्तावेज़ बनाए हैं और कुछ सरल प्रश्न बनाने में कामयाब रहे हैं, लेकिन मैं एक क्वेरी नहीं बना सकता हूं जो दस्तावेजों को मिलेगा जहां एक फ़ील्ड मौजूद है।मैं कैसे जांच सकता हूं कि मोंगोडीबी में कोई क्षेत्र मौजूद है या नहीं?

उदाहरण के लिए मान लीजिए कि यह एक दस्तावेज है:

{ "profile_sidebar_border_color" : "D9B17E" , 
    "name" : "???? ???????" , "default_profile" : false , 
    "show_all_inline_media" : true , "otherInfo":["text":"sometext", "value":123]} 

अब मैं एक प्रश्न जहां otherInfo में पाठ उस में कुछ है कि सभी दस्तावेजों लाना होगा चाहते हैं।

अगर कोई पाठ है, तो otherInfo बस ऐसे ही हो जाएगा: "otherInfo":[]

तो मैं otherInfo में text क्षेत्र के अस्तित्व की जांच करना चाहते।

मैं इसे कैसे प्राप्त कर सकता हूं?

उत्तर

50

आप . अंकन के साथ संयोजन में $exists ऑपरेटर का उपयोग कर सकते हैं। मोंगो-खोल में नंगे क्वेरी इस तरह दिखना चाहिए:

db.yourcollection.find({ 'otherInfo.text' : { '$exists' : true }}) 

और जावा में एक परीक्षण का मामला ऐसा दिखाई दे सकता:

BasicDBObject dbo = new BasicDBObject(); 
    dbo.put("name", "first"); 
    collection.insert(dbo); 

    dbo.put("_id", null); 
    dbo.put("name", "second"); 
    dbo.put("otherInfo", new BasicDBObject("text", "sometext")); 
    collection.insert(dbo); 

    DBObject query = new BasicDBObject("otherInfo.text", new BasicDBObject("$exists", true)); 
    DBCursor result = collection.find(query); 
    System.out.println(result.size()); 
    System.out.println(result.iterator().next()); 

आउटपुट: के लिए

1 
{ "_id" : { "$oid" : "4f809e72764d280cf6ee6099"} , "name" : "second" , "otherInfo" : { "text" : "sometext"}} 
0

क्वेरी में टेक्स्ट मान के साथ सभी तत्वों को फ़िल्टर करने में क्वेरी नहीं होगी।

db.things.find({otherInfo:{$in: [text]}}); 

BasicDBObject query = new BasicDBObject(); 
query.put("otherInfo", new BasicDBObject("$in", "[text]")); 
var result = db.find(query); 
+0

हाय धन्यवाद जवाब, मैं जावा में यह कैसे कर सकता हूं हालांकि? – jan1

+0

http://www.mongodb.org/display/DOCS/Java+Tutorial –

संबंधित मुद्दे

 संबंधित मुद्दे