如何填充猫鼬集合的嵌套对象?
how to populate nested object of an mongoose collection?
我正在开发问答网站 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);
});
});
作为回应,我没有得到所有的问题评论数据,它只显示评论数组的第一个元素,如下所示:
{
"_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
}
}
我希望得到我的问题。
这就是你所缺少的:
comments: [{
type: Schema.Types.ObjectId,
ref: "Comment",
}],
引用需要包裹在 []
中以告诉 Mongoose 这是一组评论,而不是单个评论。
错误出在您定义的架构中。
由于您要存储 ObjectID 数组,因此还要在数组中提及架构..
用这个替换“评论”定义。它会起作用。
comments: [{ type: Schema.Types.ObjectId, ref: "Comment", }]
我正在开发问答网站 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);
});
});
作为回应,我没有得到所有的问题评论数据,它只显示评论数组的第一个元素,如下所示:
{
"_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
}
}
我希望得到我的问题。
这就是你所缺少的:
comments: [{
type: Schema.Types.ObjectId,
ref: "Comment",
}],
引用需要包裹在 []
中以告诉 Mongoose 这是一组评论,而不是单个评论。
错误出在您定义的架构中。 由于您要存储 ObjectID 数组,因此还要在数组中提及架构..
用这个替换“评论”定义。它会起作用。
comments: [{ type: Schema.Types.ObjectId, ref: "Comment", }]