20

Mongooseにドキュメントを埋め込む方法を理解しています。配列として格納する場合はかなり簡単に思えます。そのユース ケースはかなり明白です。

var CommentSchema = new Mongoose.Schema({...});
var BlogPostSchema = new Mongoose.Schema({
    comments : [CommentSchema],
});

しかし、ドキュメントを前後に調べた後にどうすればよいか分からないのは、配列にある必要がない、またはしたくない単一のサブドキュメントを格納する方法です。

var UserSchema = new Mongoose.Schema({...});
var BlogPostSchema = new Mongoose.Schema({
    author: ??? // 'UserSchema' and UserSchema do not work here. 
});

これを機能させる方法はありますか?ObjectId を保存するだけではなく、User レコードの完全なコピーを保存したいのですが、配列は必要ありません。

4

3 に答える 3

18

これらの子ドキュメントが完全なドキュメントと混同されるという理由で、この方法でスキーマを埋め込むことはできません。次のように記載されているこのバグ スレッドを参照してください。

過去にこのサポートを追加しなかった理由は b/c です。これにより、疑似子ドキュメントに対してすべての事前フックが同じ方法で実行されるかどうか疑問に思うだけでなく、save() を呼び出すことができることを意味します。その子。

ここでの答えは、スキーマではなく、定義だけを共有することです。

var userdef = { name: String };
var UserSchema = new Schema(userdef);
var BlogPostSchema = new Schema({author: userdef});

これにより、スキーマを実際にネストすることなく、ネストされたユーザー オブジェクトが作成されます。

于 2013-10-28T14:04:56.610 に答える
1

情報を共有するだけでは、検証バブリングはサポートされません。また、UserSchema の検証も必要になる場合があります。

代わりに、配列の長さの検証をお勧めします

author: {type:[UserSchema], validate: function (arr) { return arr.length == 1 }},
于 2015-03-10T07:52:28.350 に答える
0

アップデート:

誰かがこれに出くわした場合に備えて、Mongoose 4.2.0 の時点で、単一の埋め込みサブドキュメントが存在します! :)

http://mongoosejs.com/docs/subdocs.html#single-embedded

于 2016-04-11T04:34:28.817 に答える