我正在研究其RESTful API的问答网站,我就此问题进行了讨论。如果有人帮助我,我将很感激,我是Node.js和Express.js的新人。
这是MongoDB问题模式:
const QuestionSchema = new Schema({
slug: {
type: String,
required: true,
},
author: {
type: Schema.Types.ObjectId,
ref: "User",
},
title: {
type: String,
required: true,
},
body: {
type: String,
required: true,
},
date: { type: String, required: true },
status: {
type: String,
required: true,
},
category: {
type: Schema.Types.ObjectId,
ref: "Category",
},
bookmarked: Boolean,
comments: {
type: Schema.Types.ObjectId,
ref: "Comment",
},
});
这是数据示例:
{
"_id" : ObjectId("5ef8c312731f9c10f407defb"),
"slug" : "question2",
"title" : "چه نامهایی باعث افزایش برکت در خانه میشوند؟",
"body" : "لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.",
"date" : "28/june/2020",
"status" : "1",
"bookmarked" : false,
"category" :ObjectId("5ef8be8204fe40030cf911ef"),
"author" : ObjectId("5ef8bcf63f2b47099ca117ef"),
"__v" : 0,
"comments" : [
ObjectId("5ef8c44423f04831e41f14d3"),
ObjectId("5ef8c46323f04831e41f14d4"),
ObjectId("5ef8c52f2ffd6929e09d10dd"),
ObjectId("5ef8c52f2ffd6929e09d10de"),
ObjectId("5ef8c5302ffd6929e09d10df"),
ObjectId("5ef8c57b2ffd6929e09d10e0"),
ObjectId("5ef8c5852ffd6929e09d10e1")
]
}
这是服务器端获取所有问题的代码:
// Route to get all questions
app.get("/questions", function (req, res) {
db.Question.find({})
.populate("author category comments")
.then(function (dbQuestions) {
res.json(dbQuestions);
})
.catch(function (err) {
res.json(err);
});
});
作为回应,我没有得到所有的Questions Comments数据,只是它显示了comment数组的第一个元素,如下所示:
{
"_id": "5ef8c312731f9c10f407defb",
"slug": "question2",
"title": "چه نامهایی باعث افزایش برکت در خانه میشوند؟",
"body": "لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ، و با استفاده از طراحان گرافیک است، چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است، و برای شرایط فعلی تکنولوژی مورد نیاز، و کاربردهای متنوع با هدف بهبود ابزارهای کاربردی می باشد، کتابهای زیادی در شصت و سه درصد گذشته حال و آینده، شناخت فراوان جامعه و متخصصان را می طلبد، تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی، و فرهنگ پیشرو در زبان فارسی ایجاد کرد، در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها، و شرایط سخت تایپ به پایان رسد و زمان مورد نیاز شامل حروفچینی دستاوردهای اصلی، و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد.",
"date": "28/june/2020",
"status": "1",
"bookmarked": false,
"category": {
"_id": "5ef8be8204fe40030cf911ef",
"title": "زکات",
"__v": 0
},
"author": {
"_id": "5ef8bcf63f2b47099ca117ef",
"firstName": "خالد",
"lastName": "صمدی",
"userAvatar": "./images/avatars/2.jpg",
"__v": 0
},
"__v": 0,
"comments": { //here is showing only single element of array
"_id": "5ef8c44423f04831e41f14d3",
"Body": "شرح نظریه اینجا نویشته میگردد که دارای متن مفصل میباشد",
"author": "5ef8bd2e3f2b47099ca117f0",
"date": "20/10/2020",
"__v": 0
}
}
我希望得到我的问题。
答案 0 :(得分:0)
这就是您所缺少的:
comments: [{
type: Schema.Types.ObjectId,
ref: "Comment",
}],
该引用需要包裹在[]
中,以告诉Mongoose这是一个注释数组,而不是单个注释。
答案 1 :(得分:0)
错误在于您定义的架构。 由于您将要存储ObjectID数组,因此在数组中还要提及架构。
以此替换“评论”定义。它将起作用。
comments: [{ type: Schema.Types.ObjectId, ref: "Comment", }]