gpt4 book ai didi

javascript - 使用 Mongoose 时遇到问题 'Populate'

转载 作者:行者123 更新时间:2023-11-30 19:10:07 29 4
gpt4 key购买 nike

早上好

所以我似乎无法使用 Node.js 和 Mongoose 填充我的字段。它只是打开一个空白数组:

结果:(JSON)

[
{
"courseassignments": [],
"_id": "5db56ceb4cc2c92824ae2651",
"name": "Garibaldi",
"website": "www.garibaldi.org.uk",
"__v": 0
},
{
"courseassignments": [],
"_id": "5db56d074cc2c92824ae2652",
"name": "Kirk Hallam",
"website": "www.kirkhallamacademy.co.uk",
"__v": 0
}
]

下面是我使用调用填充函数的代码,以及我为每个数据使用的模型。这很奇怪。

*school.js(模型)*

// Require modules within our file:
const mongoose = require('mongoose')

const schoolSchema = new mongoose.Schema({
name: {
type: String,
required: true,
unique: true,
trim: true
},
website: {
type: String,
required: true,
trim: true
},
logo: {
type: Buffer
},
courseassignments: [{
type: mongoose.Schema.Types.ObjectID,
ref: 'CourseAssignment'
}]
})

// Export the user to use within other files:
const school = mongoose.model('School', schoolSchema)
module.exports = school

courseassignment.js(模型)

// Require modules within our file:
const mongoose = require('mongoose')

const courseAssignmentSchema = new mongoose.Schema({
school: {
type: mongoose.Schema.Types.ObjectID,
required: true,
ref: 'School'
},
course: {
type: mongoose.Schema.Types.ObjectID,
required: true,
ref: 'Course'
}
})

// Export the user to use within other files:
const courseAssignment = mongoose.model('CourseAssignment', courseAssignmentSchema)
module.exports = courseAssignment

* 获取数据的代码:(在 app.js 中)*

router.get('/school', async (req, res) => {

const schools = await School.find({}).populate({ path: 'courseassignments' })
res.send(schools)

})

最佳答案

我将从学校模型中删除类(class)分配引用,并利用虚拟填充。

步骤如下:

  • school.js(学校模型 - 如您所见,我删除了 courseassignments 引用,并添加了虚拟功能选项)
const mongoose = require('mongoose')

const schoolSchema = new mongoose.Schema({
name: {
type: String,
required: true,
unique: true,
trim: true
},
website: {
type: String,
required: true,
trim: true
},
logo: {
type: Buffer
}
}, {
toJSON: { virtuals: true },
toObject: { virtuals: true }
})

schoolSchema.virtual("courseassignments", {
ref: "CourseAssignment",
foreignField: "school",
localField: "_id"
})

const school = mongoose.model('School', schoolSchema)
module.exports = school

此时,当您到达学校终点时,您的 react 将是这样的。(我只展示了一项。)

[
{
"_id": "5db5a809cfc9951770d5078a",
"name": "school 1",
"website": "school 1 website",
"__v": 0,
"courseassignments": [
{
"_id": "5db5a892cfc9951770d50790",
"school": "5db5a809cfc9951770d5078a",
"course": "5db5a847cfc9951770d5078d",
"__v": 0
},
{
"_id": "5db5a89ccfc9951770d50791",
"school": "5db5a809cfc9951770d5078a",
"course": "5db5a851cfc9951770d5078e",
"__v": 0
},
{
"_id": "5db5a8a1cfc9951770d50792",
"school": "5db5a809cfc9951770d5078a",
"course": "5db5a858cfc9951770d5078f",
"__v": 0
}
],
"id": "5db5a809cfc9951770d5078a"
},
...
...
]

如果您还想访问类(class)名称(我认为这很好),

  • courseassigment.js
const mongoose = require('mongoose')

const courseAssignmentSchema = new mongoose.Schema({
school: {
type: mongoose.Schema.Types.ObjectID,
required: true,
ref: 'School'
},
course: {
type: mongoose.Schema.Types.ObjectID,
required: true,
ref: 'Course'
}
}, {
toJSON: { virtuals: true },
toObject: { virtuals: true }
})

courseAssignmentSchema.pre(/^find/, function (next) {

this.populate({
path: 'course'
});
next();
});


// an index may be required like this
//courseAssignmentSchema.index({ school: 1, course: 1 }, { unique: true });

const courseAssignment = mongoose.model('CourseAssignment', courseAssignmentSchema)
module.exports = courseAssignment

结果将包含与类(class)相关的字段,例如类(class)名称。

[[
{
"_id": "5db5a809cfc9951770d5078a",
"name": "school 1",
"website": "school 1 website",
"__v": 0,
"courseassignments": [
{
"_id": "5db5a892cfc9951770d50790",
"school": "5db5a809cfc9951770d5078a",
"course": {
"_id": "5db5a847cfc9951770d5078d",
"name": "course 1",
"__v": 0
},
"__v": 0,
"id": "5db5a892cfc9951770d50790"
},
{
"_id": "5db5a89ccfc9951770d50791",
"school": "5db5a809cfc9951770d5078a",
"course": {
"_id": "5db5a851cfc9951770d5078e",
"name": "course 2",
"__v": 0
},
"__v": 0,
"id": "5db5a89ccfc9951770d50791"
},
{
"_id": "5db5a8a1cfc9951770d50792",
"school": "5db5a809cfc9951770d5078a",
"course": {
"_id": "5db5a858cfc9951770d5078f",
"name": "course 3",
"__v": 0
},
"__v": 0,
"id": "5db5a8a1cfc9951770d50792"
}
],
"id": "5db5a809cfc9951770d5078a"
},
...
...
]

文档:

https://mongoosejs.com/docs/tutorials/virtuals.html

https://mongoosejs.com/docs/populate.html#populate-virtuals

关于javascript - 使用 Mongoose 时遇到问题 'Populate',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58578993/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com