Node.js 如何正确使用嵌套的mongoose模型和模式

Node.js 如何正确使用嵌套的mongoose模型和模式,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,这是我的模式。我是新的猫鼬,但尝试的政策,为什么要发送额外的信息时,不需要。我试着做一个评论和喜欢的子文档 var post = new Schema({ postid: {type: Number, required: true, unique: true}, title: {type: String, required: [true, 'Title cannot be blank']}, startdate: {type: Date, required: true,

这是我的模式。我是新的猫鼬,但尝试的政策,为什么要发送额外的信息时,不需要。我试着做一个评论和喜欢的子文档

var post = new Schema({
    postid: {type: Number, required: true, unique: true},
    title: {type: String, required: [true, 'Title cannot be blank']},
    startdate: {type: Date, required: true, default: Date.now},
    enddate: {type: Date, required: true, default: new Date(+new Date() + 15 * 24 * 60 * 60 * 1000)},
    comments: [
        {
            id: {type: Number, required: true},
            message: {type: String, required: true},
            userid: {type: String, required: true, unique: true},
            updated_at: {type: Date, required: true, default: Date.now, select: false},
            likes: [
                {
                    userid: {type: String, required: true, unique: true},
                    updated_at: {type: Date, required: true, default: Date.now},
                }
            ],
        }
    ],
}, {
    timestamps: {
        createdAt: 'created_at',
        updatedAt: 'updated_at'
    }
});

post.index({postid: 1});
我正在使用
lean()
在RESTAPI中获取数据

使用mysql,使用ORM并通过一个查询完成所有这些操作非常容易。现在在猫鼬,我做这件事的方式很糟糕,就像

对于第一条路线,我正在做

Posts.find({}).select({
    postid: true,
    title: true,
    startdate: true,
    enddate: true,
    comments: true
}).lean().exec(function(err, doc){
    if (doc) {
       if(doc.comments.length > 0) {
          doc.commentcount = doc.comments.length;
          delete doc.comments;
       }
    } 
});
和我在其他两条路线上做的一样。我觉得使用猫鼬模型可能有一个合适的方法来完成所有这些。我尝试过使用
聚合
填充
。但不是我的那块蛋糕


如果有人能指导如何使用ORM并正确获取其中一个的数据,我将很高兴,并能完成其余的工作。

您只能添加
如计数:{type:Number}
注释
字段中,并在
时增加此字段。将
新对象推送到
喜欢的
字段。

在新创建增量、删除减量时维护该部分不会是额外的负担。
// post/:id [GET]
{
    postid: 1,
    title: "dfdsfadsf",
    startdate: "dafdsfadsf",
    enddate: "dsafdsfads",
    comments: [{
        {id: 1, message: "ddsfsfadsfa", likescount: 6},
        {id: 2, message: "dsfafdrsdsfa", likescount: 3},
        {id: 3, message: "dsfaefdsdsfa", likescount: 4},
        {id: 4, message: "dfsfdsfadsfa", likescount: 5},
        {id: 5, message: "fdsfdsfadsfa", likescount: 7},
        {id: 6, message: "dsfadwsfadsf", likescount: 0}
    }]
}
// post/:id/comments/:commentid/likes [GET]
{
    id: "1",
    message: "fadsfads",
    likes: [
        { userid: 1, updated_at: "some date" },
        { userid: 2, updated_at: "some date" },
        { userid: 3, updated_at: "some date" },
        { userid: 4, updated_at: "some date" },
        { userid: 5, updated_at: "some date" },
        { userid: 6, updated_at: "some date" }
    ]
}
Posts.find({}).select({
    postid: true,
    title: true,
    startdate: true,
    enddate: true,
    comments: true
}).lean().exec(function(err, doc){
    if (doc) {
       if(doc.comments.length > 0) {
          doc.commentcount = doc.comments.length;
          delete doc.comments;
       }
    } 
});