2013-01-16 3 views
6

मेरे दस्तावेज़ में clients नामक एक फ़ील्ड है जिसमें क्लाइंट आईडी की एक सरणी शामिल है।मोंगोस में ऑब्जेक्टआईडी के पॉप्युलेटिंग सरणी

{ 
    "first_name":"Nick", 
    "last_name":"Parsons", 
    "email":"[email protected]", 
    "password":"foo", 
    "clients":[ 
    "50f5e901545cf990c500000f", 
    "50f5e90b545cf990c5000010" 
    ] 
} 

मेरा डेटा JSON के रूप में आ रहा है, और मैं इसे दस्तावेज़ बनाने के लिए सीधे मोंगो को भेजता हूं। किसी कारण से, clients जब मैं बनाता हूं तो पॉप्युलेट नहीं किया जा रहा है, इसलिए मुझे मैन्युअल रूप से उन्हें तारों में दर्ज करना होगा।

मेरे स्कीमा काफी सरल है, और के रूप में परिभाषित: सही ढंग से

var userSchema = new Schema({ 
    first_name: { 
     type: String, 
     trim: true 
    }, 
    last_name: { 
     type: String, 
     trim: true 
    }, 
    email: { 
     type: String, 
     trim: true, 
     lowercase: true, 
     index: true, 
     unique: true, 
     required: true 
    }, 
    password: String, 
    clients: [Schema.Types.ObjectId] 
}); 

मेरी समझ से, मैं परिभाषित किया है ग्राहकों। लेकिन जब मैं निर्माण कर रहा हूं तो मैं क्लाइंट सरणी को पॉप्युलेट नहीं कर सकता। घटना में कच्ची वस्तु जो मोंगो को पारित हो जाती है अच्छी लगती है।

{ 
    first_name: 'Zack', 
    last_name: 'S', 
    email: '[email protected]', 
    password: 'test', 
    clients: [ 
     '50f5e901545cf990c500000f', 
     '50f5e90b545cf990c5000010' 
    ] 
} 

क्या कुछ खास है जो मुझे अपने इनपुट में करना है ताकि इसे सही ढंग से डाला जा सके?

उत्तर

2

स्वीकार किए जाते हैं जवाब पुरानी हो सकती है ...

आप इस संग्रह को अद्यतन करने जा रहे हैं, मैं एक $ धक्का अद्यतन का उपयोग कर की सिफारिश करेंगे। अद्यतन करने की यह विधि अद्यतन करने से बचने के लिए डिज़ाइन की गई है जब आप जो कुछ भी कर रहे हैं वह संग्रह में किसी सरणी में संलग्न हो रहा है।

http://docs.mongodb.org/manual/reference/operator/update/push/

+0

कृपया, अपनी सिफारिश तकनीक के लिए मोंगोस में कुछ उदाहरण दिखाएं। –

+1

उदाहरण दिए गए लिंक पर उदाहरण मिल सकते हैं .. http://docs.mongodb.org/manual/reference/operator/update/push/#examples –

10

सरल फिक्स। जांच कर रहा है कि आने वाली सरणी आबादी है या नहीं। यदि ऐसा है, तो मैं प्रत्येक के माध्यम से लूप करता हूं और एक परिवर्तित ऑब्जेक्ट संस्करण को सरणी में धक्का देता हूं। स्पष्ट रूप से mongoose.Types.ObjectId('STRING'); एक सामान्य स्ट्रिंग को वैध मोंगोस आईडी में कनवर्ट करने में सक्षम है।

// if clients was passed with associated client ids 
if (data.clients.length > 0) { 

    _.map(data.clients, function(cid) { 

     // push client id (converted from string to mongo object id) into clients 
     user.clients.push(mongoose.Types.ObjectId(cid)); 

    }); 

} 

उम्मीद है कि यह किसी और की मदद करेगा।

+1

नकल धक्का नहीं होगा user.clients की सामग्री? –

+0

मैं आपके मानचित्र फ़ंक्शन –

+0

@ प्रातिक बोथ्रा नंबर में उदाहरण के लिए 'cid's' कैसे बना सकता हूं क्योंकि वह data.clients को लूप करते समय उपयोगकर्ता.clients में धक्का दे रहा है। –