2016-08-02 16 views
5

यदि मेरे पास समान संरचना वाले दस्तावेज़ हैं। मैं उन्हें गणना के परिणामों के साथ अद्यतन कर रहा हूं और मैं जानना चाहता हूं कि परिणाम पहले ही किसी दस्तावेज़ में डाला गया है या नहीं। मान लें कि प्रत्येक दस्तावेज़ के लिए मैं गणना 'सी' और गणना 'डी' चलाता हूं। अब मैं सभी दस्तावेजों की एक तालिका प्रदर्शित करना चाहता हूं और दिखा सकता हूं कि गणना 'डी' पहले से ही की जा चुकी है या नहीं। और इस तालिका के लिए मुझे गणना 'सी' की परवाह नहीं है।यह प्रोजेक्ट कैसे करें कि क्षेत्र मौजूद है या नहीं

{ 
"_id":1 
"a":1, 
"resultsOfComputation":{ 
    "c":{large embedded document}, 
    "d":{large embedded document} 
    } 
} 

{ 
"_id":2 
"a":1, 
"resultsOfComputation":{ 
    "c":{large embedded document} 
    } 
} 

मैं एक परिणाम प्राप्त करना चाहता हूं जो मुझे बताता है कि दस्तावेज़ में एक विशिष्ट फ़ील्ड है या नहीं। उदाहरण के लिए, मैं जानना चाहता हूं कि इसमें फ़ील्ड "resultsOfComputation.d" फ़ील्ड है, इससे कोई फर्क नहीं पड़ता कि उस फ़ील्ड का मूल्य क्या है।

"resultsOfComputation.d" के लिए क्वेरी का परिणाम का एक उदाहरण होगा:

{ 
"_id":1 
"a":1, 
"resultsOfComputation":{ 
    "d":true 
    } 
} 

{ 
"_id":2 
"resultsOfComputation":{ 
    "d":false 
    } 
} 

हैं "resultsOfComputation.d" दस्तावेज़ यह भी अपरिभाषित किया जा सकता है, जो भी ठीक है में नहीं है:

{ 
"_id":1 
"a":1, 
"resultsOfComputation":{ 
    "d":true 
    } 
} 

{ 
"_id":2 
"a":1, 
"resultsOfComputation":{} 
} 

सामान्य में, विचार दस्तावेजों के सभी जड़ तत्व है, लेकिन पाने के लिए है ही सही/गलत/अपरिभाषित चयनित (एक) गणना के परिणाम के लिए, के बाद से गणना के परिणाम एक बड़े एम्बेडेड दस्तावेज है ।

उत्तर

4

भागो निम्नलिखित एकत्रीकरण पाइपलाइन वांछित परिणाम पाने के:

db.collection.aggregate([ 
    { 
     "$project": { 
      "a": 1, 
      "resultsOfComputation": { 
       "d": { "$gt": ["$resultsOfComputation.d", null] } 
      } 
     } 
    } 
]) 

नमूना आउटपुट

/* 1 */ 
{ 
    "_id" : 1, 
    "a" : 1, 
    "resultsOfComputation" : { 
     "d" : true 
    } 
} 

/* 2 */ 
{ 
    "_id" : 2, 
    "a" : 1, 
    "resultsOfComputation" : { 
     "d" : false 
    } 
} 
+1

मैं इस प्रश्न के द्वारा उड़ा रहा हूँ! वाह! बस वाह! लेकिन क्या आप मुझे समझने में मदद कर सकते हैं कि '$ gt' सच या गलत का आउटपुट कैसे दे रहा है? – Nattyk

+0

यह [लिंक किया गया उत्तर] (http://stackoverflow.com/a/29837432/122005) यह सब बताता है। – chridam

+0

यह उत्तर काम करता है, दुर्भाग्य से कुल का उपयोग करना मेरे लिए काफी धीमा था, खासकर जब मैंने पाइपलाइन पर छोड़ दिया। अंत में, मैंने केवल एक प्रक्षेपण के साथ कुल मिलाकर उपयोग किया, जिसमें दस्तावेज के सभी मूल तत्व और एक फ़ील्ड शामिल है जो मुझे पता है कि हमेशा "resultsOfComputation.d" के अंदर है और फिर मैं जांचता हूं कि यह फ़ील्ड अपरिभाषित है या नहीं। – Marcel

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