2013-01-08 10 views
23

मेरे पास दो कुंजी ए और बी हैं और दस्तावेज़ में उनका अस्तित्व पारस्परिक रूप से अनन्य है। मुझे ए द्वारा समूह करना है जब बी मौजूद है और जब बी मौजूद है तो बी द्वारा समूह। इसलिए मैं $project को माइकी नामक एक गणना की गई कुंजी में आवश्यक मान में डाल रहा हूं जिस पर मैं $group करूँगा। लेकिन ऐसा लगता है कि मैं वाक्यविन्यास के साथ गलती कर रहा हूं। मैं दो तरीकों से $ परियोजना लेखन की कोशिश की:

{$project: {MyKey: {$cond: [{$exists: ["$A", true]}, "$A", "$B"]}}}

और

{$project: {MyKey: {$cond: [{"A": {$exists:true}}, "$A", "$B"]}}}

लेकिन मैं त्रुटि मिलती रहती है:

{ "errmsg" : "exception: invalid operator '$exists'", "code" : 15999, "ok" : 0 } ...

गलत क्या हो रहा है?

उत्तर

19

उपयोग $ifNull बजाय में $cond अपने $project:

{ $project: {MyKey: {$ifNull: ['$A', '$B'] }}} 

A मौजूद है और null अपने मूल्य का उपयोग किया जाएगा नहीं है; अन्यथा B का मान उपयोग किया जाता है।

+0

फिर से धन्यवाद! :-) मैंने इस पर इतना समय बर्बाद कर दिया .. –

+0

क्या मैं $ isNull और cond दोनों का उपयोग कर सकता हूं? –

1

मुझे एक ही समस्या की तलाश करते हुए आपके प्रश्न मिलते हैं, लेकिन एक कुंजी से जुड़ा हुआ, मैं अपने पैरामीटर की तलाश में था। अंत में मैंने इस मुद्दे को हल किया।

यही वह है जो मैंने अपने $ _id.status पैरामीटर के लिए उपयोग किया है, यह जांचने के लिए कि यह कंड के अंदर मौजूद है या नहीं।

$cond: [{ 
    $or: [{ 
      $ne: ["$_id.status", null] 
    }] 
}, 1, null] 

$ या जरूरत नहीं है। मैं इसे वहां रखता हूं ... बस मस्ती के लिए। मुझे नहीं लगता कि यह इस पल के लिए बहुत अधिक पूछताछ को प्रभावित करता है। मैं बाद में गति का परीक्षण करूंगा।

9

एक $ जाँच करने के लिए चाहता है के साथ $ cond में एक वैकल्पिक दृष्टिकोण है नहीं

enter image description here

के रूप में $ के लिए $ cond

{$project: {MyKey: {$cond: [{$not: ["$A"]}, "$B", "$A"]}}} 

और सच्चाई की मेज के साथ $ नहीं उपयोग करने के लिए है मौजूद है

उम्मीद है कि

4

आप अनुकरण कर सकते हैं

$ne : [$var_to_check, undefined] 

यह सत्य लौटाता है यदि var परिभाषित किया गया है

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