gpt4 book ai didi

node.js - 使用 mongoose 将嵌入文档的多个实例保存到我的模型中

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:00 25 4
gpt4 key购买 nike

我正在尝试在模型中保存嵌入文档的多个实例,并且希望每次填写表单数据时,都会创建嵌入文档的新实例并将其推送到数组中。

这是我的预测架构。

const mongoose = require('mongoose');
mongoose.Promise = global.Promise;

const slug = require('slugs');

const teamSchema = new mongoose.Schema({
team1: {
type: String
},
team2: {
type: String
},
prediction:{
type: String
}
});

const predictionSchema = new mongoose.Schema({
author:{
type: String
},
team: [ teamSchema ]
});


module.exports = mongoose.model('Prediction', predictionSchema);

这是我的 Controller

const mongoose = require('mongoose');
const Prediction = mongoose.model('Prediction');

exports.homePage = (req, res) => {
res.render('layout', {title: 'Home'});
};

exports.addPrediction = (req, res) => {
res.render('editPrediction', {title: 'Add Prediction'});
};

exports.createPrediction = async(req, res) => {
const prediction = new Prediction({
author: req.body.author,
team: {
team1: req.body.team1,
team2: req.body.team2,
prediction: req.body.prediction
}
});
await prediction.save();
res.redirect('/');
};

还有我的 Form.pug

form.ui.form.segment#register-form(action='/add' method='POST')
.field
label Name
|
.ui.left.labeled.icon.input
input(type='text', placeholder='Name', name='author')
|
i.user.icon
#fields
- for(var i = 0; i < 2; i++)
.field
label Team 1
|
.ui.left.labeled.icon.input
input(type='text', placeholder='Team 1', name='team1')
|
i.soccer.icon
.field
label Team 2
|
.ui.left.labeled.icon.input
input(type='text', placeholder='Team 2', name='team2')
|
i.soccer.icon
.field
label Prediction
|
.ui.left.labeled.icon.input
input(type='text', placeholder='Prediction', name='prediction')
|
i.lock.icon
button.ui.button.fluid(type='submit') Save

当我尝试保存一个预测实例时,模型中保存的数据如屏幕截图所示。

Database One Instance

当我尝试从表单中保存两个预测实例时。团队的第二个实例只是附加到第一个实例中,而不是作为新对象创建并插入团队数组中。

Database Multiple Instances

当我想从表单中保存团队的多个实例时,我需要创建一个新文档并将其推送到团队数组中。我错过了什么?

最佳答案

您必须将第一个架构选项定义为数组:

const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
const slug = require('slugs');

const teamSchema = new mongoose.Schema({
team1: [{
type: String
}],
team2: [{
type: String
}],
prediction:[{
type: String
}]
});

const predictionSchema = new mongoose.Schema({
author:{
type: String
},
team: type: teamSchema
});

并且您的form.Pug是正确的然后您可以在保存后通过以下方式访问它们:

team.team1[0] team.team2[0] team.prediction[0]

关于node.js - 使用 mongoose 将嵌入文档的多个实例保存到我的模型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45643621/

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