Você precisa criar um NOVO esquema para seus documentos incorporados ou deixar a declaração de tipo como uma matriz em branco para que
mongoose
interpreta como um Mixed
tipo. var userSchema = new mongoose.Schema({
name: String,
photos: []
});
var User = mongoose.model('User', userSchema);
-- OU --
var userSchema = new mongoose.Schema({
name: String,
photos: [photoSchema]
});
var photoSchema = new mongoose.Schema({
src: String,
title: String
});
var User = mongoose.model('User', userSchema);
E então você pode salvar assim:
var user = new User({
name: 'Bob',
photos: [ { src: '/path/to/photo.png' }, { src: '/path/to/other/photo.png' } ]
});
user.save();
A partir daqui, você pode simplesmente usar primitivos de matriz para encontrar seus documentos incorporados:
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' }
});
-- OU --
Você pode usar o
id()
especial método em documentos incorporados para procurar por id:User.findOne({name: 'Bob'}, function (err, user) {
user.photos.id(photo._id);
});
Você pode ler mais aqui:http://mongoosejs.com/docs/subdocs.html
Certifique-se de NÃO registre o esquema com o mangusto, caso contrário ele criará uma nova coleção. Lembre-se também de que, se os documentos filhos forem pesquisados com frequência, seria uma boa ideia usar refs e população como abaixo. Mesmo que atinja o banco de dados duas vezes, é muito mais rápido devido à indexação. Além disso,
mongoose
vai bater em documentos de aninhamento duplo (ou seja, as crianças também têm documentos filhos) 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);
});
Documentos relevantes podem ser encontrados aqui http://mongoosejs.com/docs/populate.html