दिलचस्प पोस्ट
मुझे कैसे पता चलेगा कि इनलाइन फ़ंक्शन को वास्तव में उस स्थान पर स्थान दिया जाता है जहां इसे कहा जाता है या नहीं? एसक्यूएल सर्वर मौजूदा सारणी के लिए ऑटो इंप्रेशन प्राथमिक कुंजी जोड़ता है इनपुट प्रकार = "सबमिट करें" बनाम बटन टैग वे विनिमेय हैं? एक तत्व को दो स्रोतों से बांधाएं SQL डाटाबेस में प्राथमिक कुंजी के रूप में स्ट्रिंग्स SPAN बनाम DIV (इनलाइन-ब्लॉक) विज़ुअल स्टूडियो 2015/2017 टेस्ट रनर मेरे xUnit v2 परीक्षणों की खोज क्यों नहीं कर रहा है PHP – साहचर्य सरणी की शुरुआत के लिए आइटम जोड़ें एंड्रॉइड – वॉलपेपर छवि कैसे सेट करें चर निर्दिष्ट करने पर SET बनाम चयन करें? मैं जावा में पॉइंटर्स का उपयोग कैसे कर सकता हूं? WPF StringFormat = {0: C} डॉलर के रूप में दिखा रहा है संग्रह का उद्देश्य क्या है। चाइमेनैप? एचटीएमएल चपलता पैक पट्टी टैग श्वेतसूची में नहीं फ्रेगमेंट में एंड्रॉइड विकल्प मेनू

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

मैंने कुछ प्रकार के ढीली 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!" } } } } 

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

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

आप सही हैं कि बीएसओएन दस्तावेज़ के कुछ बयान में एक 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; } } })