MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगो एंबेडेड दस्तावेज़ क्वेरी

क्या हम सीधे <के साथ किसी दस्तावेज़ पर फ़िल्टर कर सकते हैं code>ReferenceField's एक ही क्वेरी में फ़ील्ड?

नहीं, ReferenceField . के फ़ील्ड वाले दस्तावेज़ को सीधे फ़िल्टर करना संभव नहीं है ऐसा करने के लिए जुड़ने की आवश्यकता होगी और मोंगोडब जुड़ने का समर्थन नहीं करता है।

डेटाबेस संदर्भ: पर MongoDB डॉक्स के अनुसार

दूसरे पेज से आधिकारिक साइट पर:

इसलिए 1 क्वेरी में, हम दोनों कार्यों को फ़िल्टर नहीं कर सकते हैं एक विशेष ध्वज मान के साथ और दिए गए user_id . के साथ और task_id UserTasks . पर मॉडल।

फिर फ़िल्टरिंग कैसे करें?

आवश्यक शर्तों के अनुसार फ़िल्टरिंग करने के लिए, हमें 2 प्रश्नों को निष्पादित करने की आवश्यकता होगी।

पहली क्वेरी में हम कार्यों . को फ़िल्टर करने का प्रयास करेंगे दिए गए task_id . के साथ मॉडल और ध्वज . फिर, दूसरी क्वेरी में, हम UserTasks . को फ़िल्टर करेंगे दिए गए user_id . के साथ मॉडल और कार्य पहली क्वेरी से लिया गया।

उदाहरण:

मान लें कि हमारे पास user_id है , task_id और हमें यह जांचना होगा कि क्या संबंधित कार्य में ध्वज है मान 0 . के रूप में .

पहली क्वेरी

हम सबसे पहले my_task . को पुनः प्राप्त करेंगे दिए गए task_id . के साथ और ध्वज 0 . के रूप में ।

my_task = Tasks.objects.get(task_id=task_id, flag=0) # 1st query

दूसरी क्वेरी

फिर दूसरी क्वेरी में, आपको UserTask . पर फ़िल्टर करना होगा दिए गए user_id . के साथ मॉडल और my_task वस्तु।

my_user_task = UserTasks.objects.get(user_id=user_id, tasks=my_task) # 2nd query

आपको दूसरी क्वेरी तभी करनी चाहिए जब आपको my_task . मिले दिए गए task_id के साथ ऑब्जेक्ट करें और ध्वज मूल्य। साथ ही, यदि कोई मेल खाने वाली वस्तु नहीं है तो आपको त्रुटि प्रबंधन जोड़ना होगा।

क्या होगा यदि हमने एम्बेडेड दस्तावेज़ का उपयोग किया है कार्यों . के लिए मॉडल?

मान लें कि हमने अपने कार्यों . को परिभाषित कर दिया है दस्तावेज़ एक एम्बेडेड दस्तावेज़ . के रूप में और कार्य UserTasks . में फ़ील्ड एक एम्बेडेडडॉक्यूमेंटफ़ील्ड . के रूप में मॉडल , तो वांछित फ़िल्टरिंग करने के लिए हम नीचे कुछ ऐसा कर सकते थे:

my_user_task = UserTasks.objects.get(user_id=user_id, tasks__task_id=task_id, tasks__flag=0)

विशेष my_task प्राप्त करना कार्यों की सूची से

उपरोक्त क्वेरी एक UserTask लौटाएगी दस्तावेज़ जिसमें सभी कार्य शामिल होंगे . फिर हमें वांछित कार्य प्राप्त करने के लिए किसी प्रकार की पुनरावृत्ति करने की आवश्यकता होगी।

ऐसा करने के लिए, हम enumerate() . का उपयोग करके सूची समझ कर सकते हैं .तब वांछित सूचकांक लौटाई गई 1-तत्व सूची का पहला तत्व होगा।

my_task_index = [i for i,v in enumerate(my_user_task.tasks) if v.flag==0][0]


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडीबी और कोडइग्निटर

  2. मोंगो - उप-क्षेत्र को शीर्ष स्तर पर प्रोजेक्ट करने के लिए क्वेरी में संभव है?

  3. फ़ील्डपाथ फ़ील्ड नामों में '.' नहीं हो सकता है AGGREGATE का उपयोग करने का प्रयास करते समय

  4. पाइमोंगो अप्सर्ट थ्रो अप्सर्ट बूल त्रुटि का एक उदाहरण होना चाहिए

  5. मोंगोडीबी:डेटाबेस समवर्ती को पढ़ता/लिखता है?