2012-07-28 15 views
13

मैं वसंत का उपयोग करके मोंगोडब से पूछताछ करने की कोशिश कर रहा हूं। हमारे पास एक संग्रह है जिसमें एक पेड़ है और इसमें पेड़ पथ के रूप में वस्तुओं की एक सूची शामिल है (इसलिए हम आसानी से पेड़ को पार कर सकते हैं)। हमारे पास एक प्रश्न है जिसे किसी विशिष्ट नोड के सभी बच्चे नोड्स को वापस करने की आवश्यकता है। हमारी क्वेरी पथ में नोड (पैरेंट) वाले सभी नोड्स को चुनने पर आधारित है और माता-पिता (स्तर) से एक स्तर कम है।स्प्रिंग मोंगो मानदंड एक ही क्षेत्र में दो बार पूछताछ

Criteria.where("treePath").in(parentId).and("treePath").size(level) 

ओह, जब हम MongoDB पर इस फोन हम निम्नलिखित अपवाद: कारण कॉम की सीमाओं के:

org.springframework.data.mongodb.InvalidMongoDbApiUsageException हमारे मापदंड इस प्रकार है .mongodb.BasicDBObject, आप 'पेड़पाथ: {"$ आकार": 2}' के रूप में निर्दिष्ट दूसरी 'वृक्षपाथ' अभिव्यक्ति नहीं जोड़ सकते हैं। मानदंड में पहले से ही 'पेड़पाथ: {"$ इन" है: [ "50137df5f49f9b4a6481d639"]}'।

क्या इसे प्राप्त करने के तरीके पर अन्य सुझाव हैं? एक विकल्प जिसे मैं सोच रहा था, सीधे मोंगोडब से पूछताछ करना था। मैं

String command = "{findAndModify:\"Task\",query:{$and:[{treePath:\"5013a79a36600872ecf4dba8\"},{treePath:{$size:2}},{order:{$gte:0}}]},update:{$inc:{order:1}}}"; 
CommandResult commandResult = mongoTemplate.executeCommand(command); 

की कोशिश की लेकिन यह केवल पहला रिकॉर्ड अपडेट हो जाएगा और मैं उन सभी अद्यतन की जरूरत है।

धन्यवाद!

उत्तर

24

यह तुम क्या चाहते हो जाएगा:

int parentId = 100; 
int level = 5; 
Criteria c = new Criteria().andOperator(Criteria.where("treePath").is(parentId), 
             Criteria.where("treePath").size(level)); 
System.out.println(c.getCriteriaObject()); 

यह प्रिंट

{ "$and" : [ { "treePath" : 100} , { "treePath" : { "$size" : 5}}]} 
+0

धन्यवाद! महान काम किया! – checklist

+0

ओपेरेटर का उपयोग करके, आप उसी क्षेत्र के विभिन्न मूल्यों के लिए भी पूछ सकते हैं, अगर आपको ऐसा करने की ज़रूरत है। – hypercube

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