2017-04-05 30 views
1

Mongo DBに埋め込み文書がある文書を作成しようとしています。ドキュメントのモデル/スキーマは、次のとおりです。Mongooseは埋め込み文書を保存できません

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

// Cupboard Collection Schema 
var ShelfSchema = new Schema({ 
shelf_name: { 
    type: String 
}, 
shelf_desc: { 
    type: String 
} 
}); 

var CupboardSchema = new Schema({ 
cupboard_name: { 
    type: String, 
    required: true, 
    unique: true 
}, 
cupboard_desc: { 
type: String, 
required: true 
}, 
shelf: [ShelfSchema] 
}, 
{ 
    timestamps: true 
}); 

module.exports = mongoose.model('Cupboard', CupboardSchema); 

イメージはドキュメントを保存するためのコードを示しています。 Code for saving document

私は、コンソールで「newCupboard」を印刷するときは、次のように、私は正確な形式で文書を取得しています:

{ 
_id: 58e4b972931dc809f4127b0b 
cupboard_name: Cupboard A, 
cupboard_desc: Cupboard A Details, 
shelf: [ { 
shelf_name: Cupboard A, 
shelf_desc: Cupboard A Details, 
_id: 58e4c2742bfc0111dc47f149 
}] 
} 

をしかし、実行した後、埋め込まれた文書は、エラーがありません&救われていません表示されます。最終結果は次のようになります。

{ 
_id: 58e4b972931dc809f4127b0b 
cupboard_name: Cupboard A, 
cupboard_desc: Cupboard A Details 
} 

埋め込みドキュメントがmongo dbに保存されていないのはなぜですか?

ありがとうございました。

答えて

1

埋め込みドキュメントを別のドキュメント内のドキュメント全体として保存しないでください。文書の '_id'を保存する必要があります。レコードを取得するときには、クエリでpopulate()を呼び出します。
ので、スキーマは次のようになります、私たちはあなたが食器棚スキーマで文書を保存する必要があると仮定してみましょう - 「棚」であなたが移入することを、対応する文書を保存し、

var CupboardSchema = new Schema({ 
cupboard_name: { 
    type: String, 
    required: true, 
    unique: true 
}, 
cupboard_desc: { 
type: String, 
required: true 
}, 
shelf: { 
type: Schema.Types.ObjectId, 
ref: 'ShelfSchema'} 
}, 
{ 
    timestamps: true 
}); 

今。ドキュメントを取得するときは

CupboardSchemaModel.find({_id: <some-id-you-want-to-fetch>}).populate('shelf'); 
+0

のようにpopulate()と呼んでください。ドキュメントを2つに分けることなく直接作成することはできませんか?あなたが言ったようにそれをすることの利点は何ですか? (私はMongo DBの初心者です) –

+0

ありがとう... :) –

関連する問題