我想在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;
出版商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;
可以按照下面的代码插入两个字段,但如何将数组字段与这两个字段一起添加。
服务器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}`));
有人让我知道如何执行这项任务。
您将获得CastError
,因为mongoDB仅接收游戏
数组模式字段类型的字符串“San and”。
在Postman中,您需要将games
键更改为games[0][name]
才能将“San and”作为游戏名称@turivishal和@KunalMukherjee在最初的评论中都提到了这一点。要添加额外的数组项,可以在Postman中使用x-www-form-urlencoded
:
键:games[0][name]
value:San和
键:games[0][date]
值:2020-01-01
键:games[1][name]
值:伟大的游戏
键:games 1][date。。。
或者,您可以通过选择
raw
post body entry方法而不是x-www-form-urlencoded
直接编写JSON。这样地:
{
"company_name": "roveo",
"website": "www.ro.com",
"games": [
{
"date": "2020-01-01",
"name": "San and"
},
{
"date": "2020-01-02",
"name": "The Great Game"
}
]
}
这是我使用此方法在PostMan中获得的输出:
以及MongoDB中的DB文件:
以下是github回购协议及其工作代码:https://github.com/angusryer/mongo-play
您必须将mongodb uri指向您自己的Cloud Atlas或本地服务器实例。通过以下步骤设置Cloud Atlas。
在问题更新之前,您似乎忘记了从
以及:req中提取游戏数组。服务器中的body
。js
const { company_name, website, games } = req.body; // <-- missed `games`
const insert = new publisher({company_name, website, games}); // <-- and `games` here too
try{
const data = await insert.save();
res.send(data);
}
catch(err){
console.log(err);
}
我是mongoDB的新手,但我对couchDB非常了解。在couchdb中,我们有JSONObject和JSONArray,所以我们可以轻松地在文档中插入任何内容,比如 我想做下面这样的事情 所以这里有一个字符串列表,也可以是jsonarray或任何字符串数组,整数类型,这个数组放在文档的键名“master”上。 这是关于如何在mongodb中插入数组的全部想法。 我使用BasicBobObjec
我在一个名为course的模式中有一个名为students的数我创建了一个路由,允许我使用学生的将学生添加到这个数组中,如下所示: 当我尝试用以下JSON体向我的endpoint发出PUT请求时: 谢谢!
在我的问题的答案中给出了如何使用Mongoose来使用新的运算符的很好的解释。建议的解决方案非常适合简单的数组。如果数组在子文档中或数组的每个元素都是数组,则建议的解决方案不起作用。我的意思是这样的:
本文向大家介绍在MongoDB中将数据插入内部数组?,包括了在MongoDB中将数据插入内部数组?的使用技巧和注意事项,需要的朋友参考一下 您可以为此使用$addToSet运算符。首先让我们创建一个包含文档的集合- 以下是在方法的帮助下显示集合中所有文档的查询- 这将产生以下输出- 以下是将数据插入MongoDB的内部数组中的查询- 让我们再次检查文档- 这将产生以下输出-
b)“Units”字段包含带有“period”字段的子文档(日期对象数组),其中给定的日期位于数组中的第一和第二元素之间。 数据结构如下所示: 我尝试使用.find()和.aggregate()的各种组合,例如在periol数组上使用$project和$filter,在unit._id上使用$elemmatch之后使用$elemmatch,但是没有用--我得到了诸如“不能在数组上使用$filter
当前,我有一个数组,当通过print_r()输出时,该数组如下所示; 我想将此数据插入到一个表中,每个元素值都属于其各自的字段。 问候。