3

アイテム内にコメントが埋め込まれた次のコード スニペットがあります。

var CommentModel = new Schema({
  text: {type: String, required: true},
}, {strict: true})

CommentModel.options.toJSON = { transform: function(doc, ret, options){
  delete ret.__v;
  delete ret._id;
}}

Comment = mongoose.model('Comment', CommentModel);

var ItemModel = new Schema({
  name:        {type: String, required: true},
  comments:    [ Comment ]
}, {strict: true})

Item = mongoose.model('Item', ItemModel);

Item.findOne({}, function (err, item) {
  item.comments.forEach(function(o) {
    console.log(o.toJSON)
  })
})

ただし、返されるオブジェクトの結果の配列がマングース オブジェクトであるか、少なくとも変換が適用されていないようには見えません。どこかで何か不足していますか、それともマングースでサポートされていないだけですか?

4

2 に答える 2

5

いくつかの問題があります。

ItemModelCommentModelスキーマ内のモデルではなく、スキーマを参照する必要がCommentあります。

var ItemModel = new Schema({
  name:        {type: String, required: true},
  comments:    [ CommentModel ]   // <= Here
}, {strict: true})

関数をパラメーターとして渡すのではなく、toJSONを呼び出す必要があります。console.log

Item.findOne({}, function (err, item) {
  item.comments.forEach(function(o) {
    console.log(o.toJSON())   // <= Here
  })
})
于 2012-12-18T16:00:16.400 に答える
0

次のようなスキーマメソッドを定義できます。

CommentModel.methods.toJson = { ... };

後で編集:オプションではなく、メソッドを参照しています。ボーナスとして、このメソッド内で特定のデータをフィルタリングすることもできます:)

于 2012-12-18T15:04:35.580 に答える