让人纠结的mongoose

var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;
var ObjectId = Schema.Types.ObjectId;
var moment = require(‘moment’);
var postFind = require(‘mongoose-post-find’);
var mongooseHidden = require(“mongoose-hidden”)({ defaultHidden: {_id:true,__v:true} });
var stepSchema = new Schema({//加载图片
imgUrl: {
type: String,
required: true
},
timePoint: {//截止时间节点
type: Number
}
},{
id:false,
toObject: {getters: true},
toJSON: {getters: true}
});
//TODO:id及虚拟id的问题
var cardCommentSchema = new Schema({//卡片评论、回复

commentUser: {//评论者
    type: ObjectId,
    ref: 'UserV2',
    required: true
},
targetUser: {//评论对象
    type: ObjectId,
    ref: 'UserV2'
},
content: {//内容
    type: String,
    required: true
},
isReported: {//举报
    type: Boolean,
    default: false
},
createdAt: {
    type: Date,
    required: true,
    default: Date.now
}

},{
id:false,
toObject: {getters: true},
toJSON: {getters: true}
});
var cardSchema = new Schema({
owner: {//卡片作者
type: ObjectId,
ref: ‘UserV2’,
required: true
}, //own user id
title: {//标题
type: String,
required: true,
validate: function (val) {
return val.length <= 20;
}
},
description: {//描述
type: String,
default: ‘’
},
soundStory: {
type: String,
default: ‘’
},
steps: {//图片顺序及播放时间、
type: [stepSchema]
},
comments: {//评论
type: [cardCommentSchema]
},
playUsers: {//播放者
type: [ObjectId]
},
praiseUsers: {//收藏(点赞)者
type: [ObjectId]
},
downloadUsers: {//下载者
type: [ObjectId]
},
sharedUsers: {//分享者
type: [ObjectId]
},
reportUsers: {//举报者
type: [ObjectId]
},
color: {//颜色
type: String,
default: ‘’
},
isRecommended: {//推荐
stateType: {
type: String,
default: ‘undone’,
enum: [‘done’, ‘undone’, ‘waiting’]//推荐过,未被推荐过,等待被推荐
},
recommendAt: {
type: Date
}
},
createdAt: {
type: Date,
required: true,
default: Date.now
},
updatedAt: {
type: Date,
required: true,
default: Date.now
}
}, {
id:false,
toObject: {getters: true},
toJSON: {getters: true}
});
stepSchema.virtual(“stepId”).get(function(){
return this._id
});
cardCommentSchema.virtual(“commentId”).get(function(){
return this._id
});
cardSchema.virtual(“cardId”).get(function(){
return this._id
});
cardSchema.virtual(“commentCount”).get(function () {
return (this.comments && this.comments.length) || 0;
});
cardSchema.virtual(“downloadCount”).get(function () {
return (this.downloadUsers && this.downloadUsers.length) || 0;
});
cardSchema.virtual(“praiseCount”).get(function () {
return (this.praiseUsers && this.praiseUsers.length) || 0;
});
cardSchema.virtual(“sharedCount”).get(function () {
return (this.sharedUsers && this.sharedUsers.length) || 0;
});
cardSchema.virtual(“playCount”).get(function () {
return (this.playUsers && this.playUsers.length) || 0;
});
cardSchema.virtual(“isReported”).get(function () {
return (this.reportUsers && this.reportUsers.length) ? true : false;
});
cardSchema.virtual(“playCount”).get(function(){
return (this.playUsers&&this.playUsers.length)||0;
});
cardSchema.options.toObject.hide = ‘_id’;
cardSchema.options.toObject.transform = function (doc, ret, options) {
// remove the _id of every document before returning the result
delete ret._id;
};
stepSchema.options.toObject.transform = function (doc, ret, options) {
// remove the _id of every document before returning the result
delete ret._id;
};
//cardSchema.plugin(mongooseHidden);
//cardCommentSchema.plugin(mongooseHidden);
//stepSchema.plugin(mongooseHidden);
////cardSchema.plugin(require(‘mongoose-toobject’), { hide: ‘_id’ });
//var postFind = require(‘mongoose-post-find’);
//cardSchema.plugin(postFind, {
//
// find: function(results,done) {
// console.log(cardSchema.options);
// for(var i=0;i<results.length;i++){
// results[i]._doc.cardId = results[i]._id;
// delete results[i]._doc._id;
// delete results[i]._doc.v;
// for(var j=0;j< results[i].steps.length;j++){
// results[i].steps[j]._doc.stepId = results[i].steps[j]._doc._id;
// delete results[i].steps[j]._doc._id;
// }
// }
//
// done(null, results); //Results must be passed to callback
// },
// findOne: [
// function(result, done) {
// result._doc.cardId = result._id;
// delete result._doc._id;
// delete result._doc.
v;
// for(var j=0;j< result.steps.length;j++){
// result.steps[j]._doc.stepId = result.steps[j]._doc._id;
// delete result.steps[j]._doc._id;
// }
// done(null, result)
// }
// ]
//});

module.exports = cardSchema;