Bạn cần tạo một Lược đồ MỚI cho các tài liệu được nhúng của mình hoặc để khai báo kiểu dưới dạng một mảng trống để mongoose
diễn giải dưới dạng Mixed
loại.
var userSchema = new mongoose.Schema({
name: String,
photos: []
});
var User = mongoose.model('User', userSchema);
- HOẶC -
var userSchema = new mongoose.Schema({
name: String,
photos: [photoSchema]
});
var photoSchema = new mongoose.Schema({
src: String,
title: String
});
var User = mongoose.model('User', userSchema);
Và sau đó bạn có thể tiết kiệm như vậy:
var user = new User({
name: 'Bob',
photos: [ { src: '/path/to/photo.png' }, { src: '/path/to/other/photo.png' } ]
});
user.save();
Từ đây, bạn có thể chỉ cần sử dụng các nguyên thủy của mảng để tìm các tài liệu được nhúng của mình:
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' }
});
- HOẶC -
Bạn có thể sử dụng id()
đặc biệt trong tài liệu nhúng để tra cứu theo id:
User.findOne({name: 'Bob'}, function (err, user) {
user.photos.id(photo._id);
});
Bạn có thể đọc thêm tại đây:http://mongoosejs.com/docs/subdocs.html
Hãy chắc chắn rằng bạn KHÔNG NÊN đăng ký lược đồ với mongoose, nếu không nó sẽ tạo một bộ sưu tập mới. Cũng nên nhớ rằng nếu các tài liệu con được tìm kiếm thường xuyên, bạn nên sử dụng các số tham chiếu và dân số như bên dưới. Mặc dù nó truy cập DB hai lần, nó nhanh hơn nhiều vì được lập chỉ mục. Ngoài ra, mongoose
sẽ tham gia vào các tài liệu lồng đôi (tức là trẻ em cũng có tài liệu dành cho trẻ em)
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);
});
Bạn có thể tìm thấy các tài liệu liên quan tại đây http://mongoosejs.com/docs/populate.html