2015-05-31 7 views
5

मैंने अपने संग्रह में निम्न डेटा:संपत्ति है कि रिक्त हो सकता है नेस्ट जाँच

{ colour: { r: 0, g: 0, b: 0 }}, 
{ colour: null }, 

मैं सभी दस्तावेजों है colour == null या color.r कुछ मूल्यों के बीच कैसे मिल सकती है?

मैं

.find({ where: { $or: [{colour: null}, {"colour.r": {$gt: 0, $lt: 100}}]}}) 

की कोशिश की है लेकिन निश्चित रूप से यह मेरे cannot read property 'r' of null अशक्त पंक्तियों के लिए देता है।

उत्तर

4

उपयोग $where तभी

db.test.find({$or: [{"colour": null}, {"colour.r": {$gt: 0, $lt: 100}}]}) 
1

जब तक किसी एक क्वेरी की जरूरत नहीं है, आप 2 क्वेरी चला सकता है आपकी क्वेरी व्यक्त करने के लिए कोई दूसरा रास्ता नहीं है:

  1. सभी दस्तावेजों का पता लगाएं where color == null
  2. सभी दस्तावेज खोजें where color != null and color between 0 and 100
+0

दो प्रश्नों का उपयोग करके, उसी दस्तावेज़ को दो बार वापस करने के लिए थोड़ी सी संभावना है - अगर इसे किसी अन्य ग्राहक द्वारा समवर्ती रूप से अपडेट किया गया था। –

1

पूर्णता के लिए के लिए:

db.test.find({$nor: [{"colour.r": {$lte: 0}}, {"colour.r": {$gte: 100}}]}) 

$nor सभी दस्तावेजों भाव असफल से मेल खाएगी।

यहाँ, आप स्पष्ट रूप से null के लिए परीक्षण करने के लिए के रूप में यह न तो अधिक से अधिक है और न ही किसी भी संख्या से कम है नहीं है - इसलिए, परीक्षण विफल हो जाएगा, बस रेंज (0,100) में किसी भी नंबर की तरह


विशेष। यदि आपको श्रेणी [0,100] समेत प्रत्येक दस्तावेज़ को खोजने की आवश्यकता है, तो $gte (resp। $lte) $gt (resp। $lt) द्वारा प्रतिस्थापित करें।

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