आपको या तो अपने एम्बेडेड दस्तावेज़ों के लिए एक नई स्कीमा बनाने की आवश्यकता है, या प्रकार की घोषणा को एक रिक्त सरणी के रूप में छोड़ दें ताकि mongoose
Mixed
. के रूप में व्याख्या करता है टाइप करें।
var userSchema = new mongoose.Schema({
name: String,
photos: []
});
var User = mongoose.model('User', userSchema);
-- या --
var userSchema = new mongoose.Schema({
name: String,
photos: [photoSchema]
});
var photoSchema = new mongoose.Schema({
src: String,
title: String
});
var User = mongoose.model('User', userSchema);
और फिर आप इस प्रकार बचत कर सकते हैं:
var user = new User({
name: 'Bob',
photos: [ { src: '/path/to/photo.png' }, { src: '/path/to/other/photo.png' } ]
});
user.save();
यहां से, आप अपने एम्बेड किए गए दस्तावेज़ों को खोजने के लिए केवल सरणी प्रिमिटिव का उपयोग कर सकते हैं:
User.findOne({name: 'Bob'}, function (err, user) {
var photo = user.photos.filter(function (photo) {
return photo.title === 'My awesome photo';
}).pop();
console.log(photo); //logs { src: '/path/to/photo.png', title: 'My awesome photo' }
});
-- या --
आप विशेष id()
. का उपयोग कर सकते हैं आईडी द्वारा देखने के लिए एम्बेडेड डॉक्स में विधि:
User.findOne({name: 'Bob'}, function (err, user) {
user.photos.id(photo._id);
});
आप यहां और अधिक पढ़ सकते हैं:http://mongoosejs.com/docs/subdocs.html
सुनिश्चित करें कि आप नहीं नेवले के साथ स्कीमा पंजीकृत करें, अन्यथा यह एक नया संग्रह बनाएगा। यह भी ध्यान रखें कि यदि बच्चे के दस्तावेज़ अक्सर खोजे जाते हैं, तो नीचे दिए गए रेफरी और जनसंख्या का उपयोग करना एक अच्छा विचार होगा। भले ही यह डीबी को दो बार हिट करता है, यह इंडेक्सिंग के कारण बहुत तेज है। साथ ही, mongoose
डबल नेस्टिंग डॉक्स (यानी बच्चों के पास बच्चे डॉक्स भी हैं) पर बंध जाएगा
var user = mongoose.Schema({
name: String,
photos: [{ type: Schema.Types.ObjectId, ref: 'Photo' }]
});
var photo = mongoose.Schema({
src: String,
title: String
});
User
.findOne({ name: 'foo' })
.populate('photos')
.exec(function (err, user) {
console.log(user.photos[0].src);
});
प्रासंगिक दस्तावेज़ यहां पाए जा सकते हैं http://mongoosejs.com/docs/populate.html