【发布时间】:2021-11-25 02:21:08
【问题描述】:
我想在 mongodb 中插入数据,其中一个字段是对象类型的数组。我无法了解如何将数据与 mongoose 模式中定义的其他字段一起添加到数组字段中。当我尝试使用具有以下配置的 POSTMAN 发布数据时,如屏幕截图所示:
它的显示游戏数组是空的并且显示下面的错误
games: CastError: Cast to embedded failed for value "'San and'" (type string) at path "games"
下面是我的代码:
db.js
const mongoose = require('mongoose');
const dotEnv = require('dotenv').config();
const uri = process.env.URI;
const connect = mongoose.connect(uri,{useNewUrlParser:true,useUnifiedTopology:true})
.then(() => console.log("Database connected"))
.catch((err) => {
console.log("Something went wrong",err);
process.exit(1);
});
module.exports = connect;
publisher.js
const mongoose = require('mongoose');
const publisherSchema = new mongoose.Schema({
company_name:{
type: String
},
website:{
type: String
}
games: [{
date: Date,
name: String
}]
});
const publisher = mongoose.model('Publisher',publisherSchema);
module.exports = publisher;
可以按照下面的代码插入两个字段,但是如何添加数组字段以及这两个字段。
server.js
const express = require('express');
const connect = require('./db.js');
const publisher = require('./models/publisher.js');
const gaming = require('./models/game.js');
const app = express();
const port = process.env.PORT || 3000;
app.use(express.json());
app.use(express.urlencoded({ extended: true }))
app.post('/publish',async (req,res) => {
const { company_name,website,games } = req.body;
const insert = new publisher({company_name,website,games});
try{
const data = await insert.save();
res.send(data);
}
catch(err){
console.log(err);
}
});
app.listen(port, () => console.log(`App is up and runnning at ${port}`));
请告诉我如何执行此任务。
【问题讨论】:
-
与其他2个字段相同,只需将第三个数组字段与其他字段一起传递即可。
-
我试过了,但它没有插入到数组字段中。我已经在我的帖子中附上了 POSTMAN 的屏幕截图。
-
您没有在实际代码
new publisher({company_name,website});中传递该字段,其次邮递员请求数组字段的值为字符串,更改键名games[0]并在请求中添加新字段并增加索引以获取更多索引。 -
你从邮递员那里传错了游戏数组,像this一样传。同样正如@turivishal 所说,解构控制器中的游戏属性并将其放入 Publisher 构造函数中。
-
它在解构游戏值后显示此错误并将其添加为一个字段`游戏:CastError: Cast to embedded failed for value "'San and'" (type string) at path "games"`
标签: node.js mongodb mongoose mongoose-schema