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;
}
}
});