दिलचस्प पोस्ट
Numpy arrays और matrices के बीच अंतर क्या हैं? मुझे किसका उपयोग करना चाहिए? एक कंपाइलर लिखना सीखना सी में घोषित, अपरिष्कृत वैरिएबल का क्या होता है? क्या इसका मूल्य है? शून्य के बराबर <>! = ऑपरेटर सी में टर्मिनल चौड़ाई हो रही है? मैं कुकी से मूल्य कैसे बना सकता हूं और पढ़ सकता हूं? "अतुल्यकालिक घटना" की परिभाषा समझने में आसान है? टीएफएस 2013 निर्माण .NET 4.6 / सी # 6.0 एंड्रॉइड ==> मेमोरी विश्लेषण ==> एक्लिप्स स्मृति विश्लेषक? सुलझाना "ऑब्जेक्ट कॉन्टैक्ट इंस्टॉलेशन का निपटारा किया गया है और ऐसे ऑपरेशन के लिए उपयोग नहीं किया जा सकता जो एक कनेक्शन की आवश्यकता होती है" InvalidOperationException सी # वर्गों और सदस्यों (क्षेत्रों, विधियों, आदि) के लिए डिफ़ॉल्ट दृश्यता? javac विकल्प को सभी निर्देशिका में जरूरी निर्देशित निर्देशिका के तहत संकलित करें PrependId = "false" ब्रेक के साथ UIForm <f: AJAX रेंडर> एंड्रॉइड ब्राउज़र या वेबविवे के अंदर का पता लगाएं मेरी iPhone ऐप में तिथि करने के लिए स्ट्रिंग कन्वर्ट

मनोविज्ञानी गहराई पर मोंगोडीबी फील्ड नाम कैसे खोजें

मैंने कुछ प्रकार के ढीली XML डेटा को एक मोंगो डेटाबेस में आयात किया प्रत्येक दस्तावेज़ ने उप-दस्तावेजों को लगभग 5-10 की गहराई में रख दिया है। मैं () दस्तावेजों को ढूंढना चाहूंगा, जिनके पास विशेष फ़ील्ड का एक विशिष्ट मूल्य है, जहां फ़ील्ड उप-दस्तावेजों में किसी भी गहराई में दिखाई दे सकती है (और कई बार दिखाई दे सकती है)।

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

यहां एक उदाहरण दस्तावेज़ है:

{ "foo": 1, "bar": 2, "find-this": "Yes!", "stuff": { "baz": 3, "gobble": [ "wibble", "wobble", { "all-fall-down": 4, "find-this": "please find me" } ], "plugh": { "plove": { "find-this": "Here too!" } } } } 

इसलिए, मैं उन दस्तावेजों को ढूंढना चाहता हूं जिनके पास "खोज-इस" फ़ील्ड है, और (यदि संभव हो) उन दस्तावेज़ों को ढूंढने में सक्षम हो सकते हैं जिनके पास "खोज-इस" फ़ील्ड का कोई विशिष्ट मान है।

वेब के समाधान से एकत्रित समाधान "मनोविज्ञानी गहराई पर मोंगोडीबी फील्ड नाम कैसे खोजें"

आप सही हैं कि बीएसओएन दस्तावेज़ के कुछ बयान में एक XML दस्तावेज़ नहीं है। चूंकि एक्सएमएल एक वृक्ष संरचना में लोड होता है जिसमें "नोड्स" शामिल होता है, एक मस्तिष्क की कुंजी पर खोज करना बहुत आसान है।

एक मोनोडीबी दस्तावेज़ प्रक्रिया में इतना सरल नहीं है, और यह कई मामलों में एक "डेटाबेस" है, इसलिए आम तौर पर "अनुक्रमणिका" और खोज दोनों के लिए आसान बनाने के लिए डेटा स्थान की एक निश्चित "एकरूपता" होने की उम्मीद है

बहरहाल, यह किया जा सकता है लेकिन बेशक इसका मतलब सर्वर पर निष्पादित रिकर्सिव प्रक्रिया है और इसका अर्थ है $where साथ जावास्क्रिप्ट संसाधन

एक मूल खोल उदाहरण के रूप में, लेकिन सामान्य function केवल $where ऑपरेटर को हर जगह एक स्ट्रिंग तर्क देता है:

 db.collection.find( function () { var findKey = "find-this", findVal = "please find me"; function inspectObj(doc) { return Object.keys(doc).some(function(key) { if ( typeof(doc[key]) == "object" ) { return inspectObj(doc[key]); } else { return ( key == findKey && doc[key] == findVal ); } }); } return inspectObj(this); } ) 

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

जावास्क्रिप्ट। .some() यह सुनिश्चित करता है कि "प्रथम" मैच मिला, खोज फ़ंक्शन से एक true नतीजे देकर लौटाएगा और उस ऑब्जेक्ट को लौटाएगा जहां "गहराई / मूल्य" कुछ गहराई पर मौजूद था।

नोट करें कि $where अनिवार्य रूप से आपके पूरे संग्रह को पार करने का अर्थ है, जब तक कि संग्रह पर "अनुक्रमणिका" पर लागू किया जा सकता है, तब तक कोई अन्य मान्य क्वेरी फ़िल्टर नहीं है।

तो देखभाल के साथ उपयोग करें, या बिल्कुल नहीं और सिर्फ डेटा को और अधिक व्यावहारिक रूप में पुन: संरचना करने के साथ काम करें।

लेकिन यह आपको अपना मैच देगा।

यहां एक उदाहरण है, जिसका उपयोग मैं दस्तावेज़ संरचना में कहीं भी कुंजी-मान की रिकर्सिव खोज के लिए करता हूं:

 db.getCollection('myCollection').find({ "$where" : function(){ var searchKey = 'find-this'; var searchValue = 'please find me'; return searchInObj(obj); function searchInObj(obj){ for(var k in obj){ if(typeof obj[k] == 'object' && obj[k] !== null){ if(searchInObj(obj[k])){ return true; } } else { if(k == searchKey && obj[k] == searchValue){ return true; } } } return false; } } })