Anda perlu membuat Skema BARU untuk dokumen yang disematkan, atau membiarkan deklarasi tipe sebagai larik kosong sehingga mongoose
ditafsirkan sebagai Mixed
ketik.
var userSchema = new mongoose.Schema({
name: String,
photos: []
});
var User = mongoose.model('User', userSchema);
-- ATAU --
var userSchema = new mongoose.Schema({
name: String,
photos: [photoSchema]
});
var photoSchema = new mongoose.Schema({
src: String,
title: String
});
var User = mongoose.model('User', userSchema);
Dan kemudian Anda dapat menyimpan dengan cara ini:
var user = new User({
name: 'Bob',
photos: [ { src: '/path/to/photo.png' }, { src: '/path/to/other/photo.png' } ]
});
user.save();
Dari sini, Anda cukup menggunakan array primitif untuk menemukan dokumen tersemat Anda:
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' }
});
-- ATAU --
Anda dapat menggunakan id()
special khusus metode dalam dokumen yang disematkan untuk dicari berdasarkan id:
User.findOne({name: 'Bob'}, function (err, user) {
user.photos.id(photo._id);
});
Anda dapat membaca lebih lanjut di sini:http://mongoosejs.com/docs/subdocs.html
Pastikan Anda JANGAN daftarkan skema dengan luwak, jika tidak maka akan membuat koleksi baru. Juga perlu diingat bahwa jika dokumen anak sering dicari, sebaiknya gunakan referensi dan populasi seperti di bawah ini. Meskipun menyentuh DB dua kali, itu jauh lebih cepat karena pengindeksan. Juga, mongoose
akan menyukai dokumen bersarang ganda (yaitu Anak-anak juga memiliki dokumen anak)
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);
});
Dokumen yang relevan dapat ditemukan di sini http://mongoosejs.com/docs/populate.html