2015-12-30 3 views
6

अगर मैं इन दो संग्रह:क्या mongoDB में किसी दस्तावेज़ को अनुक्रमणित करने का कोई तरीका है जो इसके संदर्भों को पॉप्युलेट कर रहा है?

Book: { 
title: String, 
description: String 
author: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, 
} 

User: { 
_id: (generated by mongo) 
username: String 
} 

और मैं FTS सूचकांक बुक करना चाहते हैं। क्या मैं इसे इस तरह से कर सकता हूं कि यह उपयोगकर्ता नाम द्वारा खोजने योग्य भी होगा, भले ही उपयोगकर्ता नाम पुस्तक संग्रह में स्पष्ट रूप से संग्रहीत न हों?

दूसरे शब्दों में, क्या यह एक जनसंख्या संग्रह को सूचीबद्ध करने के लिए संभव (या सलाह देने योग्य) है?

धन्यवाद

+0

इन का संदर्भ लें: http://stackoverflow.com/questions/13026486/how-to-populate-a-sub-document-in-mongoose-after-creating-it http: // mongoosejs। कॉम/डॉक्स/api.html # model_Model.populate –

+0

तो इंडेक्स जोड़कर: सच है, संदर्भ संग्रह के भीतर अनुक्रमित हो जाएगा? –

+4

नहीं। किसी अन्य संग्रह से "उपयोगकर्ता नाम" (या किसी अन्य फ़ील्ड) पर मौजूद डेटा पर किसी भी प्रकार की खोज (एफटीएस या अन्यथा) करना संभव नहीं है। यह एक "जॉइन" है, जो कुछ मोंगोडीबी नहीं करता है (एकत्रीकरण '$ लुकअप' को छोड़कर), और "पॉप्युलेट" वास्तव में शामिल नहीं है, लेकिन अलग-अलग लुकअप क्वेरी चलाने के लिए बस एक सुविधा रैपर है। आप केवल एक समय में केवल एक संग्रह से डेटा खोजने के लिए डेटाबेस से पूछ सकते हैं। –

उत्तर

1

रूप Blakes सात उल्लेख किया है, यह संग्रह भर में सूचकांक के लिए संभव नहीं है।

ऐसे मामलों में जहां इस तरह की पूर्ण पाठ खोज मेरे आवेदन के लिए सर्वोपरि है, क्लासिक समाधान क्षेत्र को denormalize और दोनों संग्रहों में शामिल किया गया है।

Book: { 
    title: String, 
    description: String 
    author: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'User', 
    ### New field ### 
    username: String 
    }, 
} 

अब आप author.username पर सूचकांक कर सकते हैं: इस मामले में, अपने Book संग्रह कैसा दिखेगा।

यह आपके आवेदन पर पूरी तरह निर्भर है चाहे वह एक अच्छा विचार है या नहीं। डाउनसाइड्स में संग्रहों में username सिंक्रनाइज़ करना और प्रत्येक दस्तावेज़ में अनावश्यक वजन जोड़ना शामिल है।

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

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