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

你有几个问题:

ItemModel应该引用架构CommentModel,而不是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 回答