node.js - 如何填充猫鼬集合的嵌套对象?
问题描述
我正在开发使用其 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 这是一个评论数组,而不是单个评论。
推荐阅读
- java - 在构建 maven 单元测试时,出现以下错误
- rest - 如何避免 Json 请求有效负载中的重复字段?我正在使用带有 REST 的 Apache Camel
- python-3.x - Python 3/Pandas Dataframe 用二进制值将一列拆分为多列
- sql - 删除多个子 SQL Server 后从父表中删除行
- listview - 如何禁用 TListView 列点击?
- python - Tenforflow 稀疏算法
- c# - 是否可以在 C# 控制台中设置选项卡大小
- pug - 在对齐属性中使用变量
- react-testing-library - 我应该如何使用@testing-library/react 测试只能在异步方法的生命周期内访问的功能?
- c# - 如何显示 ObservableCollection
财产