2012-05-10 12 views
6

रेलवे पर रूबी में मैंगॉयड का उपयोग करके दस्तावेज़ के लिए एक एम्बेडेड दस्तावेज़ मौजूद है या नहीं, तो आप कैसे जांचते हैं? मान लें कि मेरे पास एक दस्तावेज़ user है जिसमें name, email है, और इसमें nicknames एम्बेडेड दस्तावेज़ हो सकता है। अभी अगर मैं user.first.nicknames चलाता हूं और यदि user में nicknames एम्बेडेड दस्तावेज़ नहीं है, तो यह त्रुटि होगी। मैंने matches? और exists? की कोशिश की है लेकिन वे काम नहीं करते हैं।मैंगॉइड में किसी दस्तावेज़ में एम्बेडेड दस्तावेज़ मौजूद है या नहीं, तो आप कैसे जांचते हैं?

धन्यवाद!

उत्तर

3

यह सच लौटना चाहिए और यह सच वापस आ जाएगी अगर यह मौजूद है: User.first.nicknames.present?

+0

ये दोनों एक mongoDB दस्तावेज़ पर काम नहीं करते हैं जिसमें 'उपनाम' नहीं है। यह एक "NoMethodError: अपरिभाषित विधि 'उपनाम' त्रुटि उत्पन्न करता है। यह उन दस्तावेज़ों के लिए काम करता है जिनके पास 'उपनाम' हैं .. – Goalie

+0

यह मेरा नहीं है, मैं MongoId 2.3.3 का उपयोग कर रहा हूं। ऐसा लगता है कि 'उपयोगकर्ता। पहला' वास्तव में शून्य है। तो आप एक शून्य ऑब्जेक्ट पर 'उपनाम' कॉल करने का प्रयास कर रहे हैं। क्या आप इसे सत्यापित कर सकते हैं? – ctcherry

0

अगर यह User.first.nicknames.nil? मौजूद नहीं है किया जाना चाहिए के रूप में सरल रूप में {"user":{"$exists":"nicknames"}}

+0

क्या यह एक मोंगो शेल कमांड है? मैं रूबी पर रूबी में एक समाधान की तलाश में हूं। – Goalie

2

आप User.where(:nicknames.exists => true).include?(user) कर सकते हैं।

User.where(:nicknames.exists => true) केवल उन दस्तावेजों को वापस करेगा जिनमें nicknames शामिल हैं।

8

अन्य उत्तरों से थोड़ी सी मदद के साथ, मुझे कुछ ऐसा मिला जो मेरे लिए काम करता था और मुझे लगता है कि मूल पोस्टर के मन में यही था;

Model.where(:"subdoc.some_attribute".exists => true) 

यह सभी दस्तावेजों को वापस कर देगा जहां "some_attribute" उप-दस्तावेज़ पर मौजूद है। प्रतीक के सिंटैक्स पर ध्यान दें, यही वह है जो मैं याद कर रहा था।

+0

आप एसोसिएशन के माध्यम से भी जा सकते हैं: 'Model.subdocs.where (: field.exists => true)'। –

+0

यही वह दिन है जो मैं पूरे दिन खोज रहा था। यह कहीं भी दस्तावेज नहीं है !? – fre2ak

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