2012-05-16 15 views
32

मैं मोंगोडीबी (जावा ड्राइवर का उपयोग कर) में कुछ शर्तों की कोशिश कर रहा हूं। यह मैं क्या कर रहा है:

Pattern regex = Pattern.compile("title"); 
DBCollection coll = MongoDBUtil.getDB().getCollection("post_details"); 

BasicDBObject query = new BasicDBObject(); 
query.put("category_title", "myCategory");  
query.append("post_title", regex); 
query.append("post_description", regex);  

DBCursor cur = coll.find(query); 
while(cur.hasNext()) { 
    System.out.println(cur.next().get("post_id")); 
} 

मैं इन शर्तों पर $or संकार्य उपयोग करना चाहते हैं, लेकिन मुझे लगता है कि डिफ़ॉल्ट है "और" और मैं नहीं जानता कि यह कैसे बदलने के लिए। उपर्युक्त कोड में यदि शर्तों में से एक null लौटाता है, तो परिणाम null भी होगा।

+0

'कोड' query.append ("$ या", नया BasicDBObject()। संलग्न करें ("post_title", regex) .append ("post_description", regex)) –

+0

यह सही नहीं दिख रहा है। $ या खंड एक सरणी द्वारा लिपटे हैं एक ऑब्जेक्ट नहीं। –

+0

लोग कृपया मेरे प्रश्न का उत्तर दें http://stackoverflow.com/questions/38115986/writing-mongodb-syntax कृपया मुझे आपकी मदद चाहिए> _ < – beboy

उत्तर

66

आप सही हैं कि एक क्वेरी में एकाधिक फ़ील्ड निर्दिष्ट करने के लिए "डिफ़ॉल्ट" यह है कि प्रत्येक फ़ील्ड एक सशर्त फ़िल्टर के रूप में कार्य करता है, और इस प्रकार एक और ऑपरेशन होता है।

आप $ या संकार्य जो निम्न सिंटैक्स है का उपयोग करके एक या खंड के साथ MongoDB प्रश्नों प्रदर्शन कर सकते हैं:

db.col.find({$or:[clause1, clause2]}) 

प्रत्येक खंड कहाँ एक प्रश्न हो सकता है। $ या शीर्ष स्तर के ऑपरेशन होने की आवश्यकता नहीं है, लेकिन यदि यह मोंगो डीबी प्रत्येक अलग खंड के लिए एक सूचकांक का उपयोग कर सकता है।

db.col.find({$or:[{"post_title", regex}, {"post_description", regex}]}); 

जिसके माध्यम से जावा में निर्माण किया जा सकता:

DBObject clause1 = new BasicDBObject("post_title", regex); 
DBObject clause2 = new BasicDBObject("post_description", regex);  
BasicDBList or = new BasicDBList(); 
or.add(clause1); 
or.add(clause2); 
DBObject query = new BasicDBObject("$or", or); 
+0

thnx, मुझे इसका परीक्षण करने दें और 2 वापस प्राप्त करें। :) – MoienGK

+0

yeppppp, यह काम करता है, thnx – MoienGK

+0

मैंने जावा ड्राइवर 3.2.2 के साथ MongoDB 3.2 में इस दृष्टिकोण की कोशिश की और मुझे त्रुटि मिलती है: 'विधि dbColl.find (DBObject) को हल नहीं कर सकता। क्या आप वास्तविक जावा ड्राइवर संस्करण के लिए उत्तर अपडेट कर सकते हैं। –

2

filters के साथ आप का निर्माण कर सकते तुम्हारा चाहते:

अपने उदाहरण में आप इस क्वेरी के साथ खत्म करना चाहते हैं

Bson filter = Filters.or(
       Filters.eq("_id", mongoId), 
       Filters.eq("activo", true) 
       ); 
संबंधित मुद्दे