2011-09-18 9 views
6

मेरे पास निम्न स्कीमा हैं; पता एक geocoded स्थान है और एजेंसी के कई पते हैं। मेरा सवाल यह है कि, यदि मैं अपने पते पर आधारित एजेंसी पर भू-स्थानिक खोज करने में सक्षम होना चाहता हूं तो क्या मुझे एजेंसी स्तर पर उन्हें किसी भी तरह से अनुक्रमणित करने की आवश्यकता है (पहले से ही स्कीमा स्तर पर अनुक्रमित)?मैं मोंगोस में एक एम्बेडेड दस्तावेज़ को इंडेक्स कर सकता/सकती हूं?

इसके अलावा, मुझे नेस्टेड दस्तावेज़ों के आधार पर खोजने के तरीके के बारे में जानकारी खोजने में कठिनाई हो रही है। इस परिदृश्य में, क्या मैं उम्मीद कर रहा हूं कि मैं अपनी डोमेन संरचना को थोड़ा सा विस्तारित करूँ और क्या करना चाहिए "एजेंसी एड्रेस"? यह दृष्टिकोण मेरे लिए थोड़ा आरडीबीएमएस लगता है लेकिन मैं इसके फायदे भी देख सकता हूं।

मैं थोड़ी उलझन में हूं कि मैं एजेंसी से ऑब्जेक्टआईडी रेफ का उपयोग कैसे कर सकता हूं (या पुल ऑब्जेक्ट एजेंसी एड्रेस) पते से वापस उलटा लिंक के बिना। मैं वापस लिंक नहीं चाहता क्योंकि पता ऐप में कई अन्य ऑब्जेक्ट्स द्वारा उपयोग किया जाएगा।

धन्यवाद!

var AddressSchema = new Schema({ 
    name  : {type: String, default : ''}, 
    street1  : {type: String, default : ''}, 
    street2  : {type: String, default : ''}, 
    city  : {type: String, default : '', required: true}, 
    state  : {type: String, required : true}, 
    zip   : {type: String, default ''}, 
    country  : {type: String}, 
    location : {longitude: Number, latitude:Number} 
    type  : {type: String, enum:['agent', 'agency', 'registrant'], index:true} 
    created_at : {type: Date, default: Date.now}, 
    updated_at : {type: Date, default: Date.now} 
    primary  : {type: Boolean, default: false} 
}); 

AddressSchema.index({location: '2d'}); 

एजेंसी:

var AgencySchema = new Schema({ 
    name   : {type : String, default : '', required : true}, 
    Type   : {type : String, enum['medical', 'disaster-service', 'local-law', 'state-law', 'federal-law'], index:true}, 
    Addresses : [Address], 
    created_at : {type : Date, default : Date.now}, 
    updated_at : {type : Date, default : Date.now} 
}); 

उत्तर

11

मैं नेवला साथ अनुभव है न, तो मैं सामान्य रूप में MongoDB अनुक्रमण व्याख्या कर सकते हैं। आपके प्रश्न से मैं समझता हूं कि कई Address एजेंसी में एम्बेड किए गए geocoded दस्तावेज़।

यदि आप mongodb संस्करण < = 1.8 का उपयोग कर रहे हैं, तो नेस्टेड geocoded दस्तावेज़ों को अनुक्रमणित करना संभव नहीं है। लेकिन सुविधा संस्करण 1.9 से जोड़ा गया है। मैं उसी तरह की स्कीमा के लिए कुछ महीनों के लिए सफलतापूर्वक उपयोग कर रहा हूं। लेकिन यह एक विकास (अस्थिर) शाखा थी।

सौभाग्य से संस्करण 2.0 एक सप्ताह पहले जारी किया गया है। और इसकी स्थिरता। अधिक जानकारी के लिए लिंक 2.0 Release Notes देखें।

और आप सीधे एम्बेडेड दस्तावेज़ों पर अनुक्रमित नहीं कर सकते हैं।

यह MongoDB खोल से इस तरह किया जाना है

db.Agency.ensureIndex({"Address.location": 2d}) 

मैं नेवला के लिए सटीक सिंटैक्स पता नहीं है, यह

AgencySchema.index({'Address.location': '2d'}); 

अधिक जानकारी के लिए बाहर mongodb indexing जांच की तरह हो सकता है

+0

आह, यह एकदम सही व्यक्ति है। धन्यवाद। – Chance

+0

यह मेरे लिए सही नहीं लगता है। क्या यह वास्तव में एक आवश्यकता है कि सूचकांक मोंगो कंसोल में बनाया जाता है ?! – Greg

+1

@ ग्रेग "क्या यह वास्तव में एक आवश्यकता है कि सूचकांक मोंगो कंसोल में बनाया गया हो", बिलकुल नहीं, आप इसे किसी भी भाषा चालक के माध्यम से कर सकते हैं, मैंने इसे कंसोल से कहा क्योंकि मुझे मोंगोस – RameshVel

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