埋め込まれたドキュメントの新しいスキーマを作成するか、型宣言を空白の配列のままにして、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()
を使用できます IDで検索する埋め込みドキュメントのメソッド:
User.findOne({name: 'Bob'}, function (err, user) {
user.photos.id(photo._id);
});
詳細については、http://mongoosejs.com/docs/subdocs.html
をご覧ください。
必ずしないでください スキーマをmongooseに登録します。登録しないと、新しいコレクションが作成されます。また、子ドキュメントが頻繁に検索される場合は、以下のような参照と母集団を使用することをお勧めします。 DBに2回ヒットしますが、インデックス作成によりはるかに高速です。また、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