我有一个数组,我希望将其传递给POST请求的请求正文。如果成功,则应将新文档插入MongoDB。到目前为止,这是我的代码:
app.post(`/api/add`, async (req, res) => {
collection.create( { 'id': req.body.id,
'name': req.body.name,
'date': req.body.date,
'groups': [
{ 'id': req.body.groups.id, 'title': req.body.groups.title, 'teamMemberIds': [ req.body.groups.teamMemberIds] }]
},
(err, result ) => {
if (err) {
console.log('error', err)
} else {
console.log('updated', result);
res.status(200).send(result);
}
})
});
我是这样用邮递员发送请求正文的:
{
"id": "1",
"name": "Saved Team 1",
"date": "1/1/20",
"groups": [
{"id": "group-1", "title": "test saved group 1", "teamMemberIds": ["bpumper", "jdoe"] },
{"id": "group-2", "title": "test saved group 2", "teamMemberIds": ["bsimmons", "ljames"] },
]
}
这是我的猫鼬图式:
const savedTeamSchema = new Schema({
id: String,
name: String,
date: String,
groups: [{ id: String, title: String, teamMemberIds: [String]}]
})
但是,在执行请求之后,这是被插入到集合中的文档:
{
"_id" : ObjectId("5eed13b216b4836f406b6f63"),
"id" : "1",
"name" : "Saved Team 1",
"date" : "1/1/20",
"groups" : [
{
"teamMemberIds" : [
null
],
"_id" : ObjectId("5eed13b216b4836f406b6f64")
}
],
"__v" : 0
}
我无法弄清楚如何将组对象添加到groups
数组中。我想念什么?
答案 0 :(得分:1)
{ 'id': req.body.groups.id, 'title': req.body.groups.title, 'teamMemberIds': [ req.body.groups.teamMemberIds] }]
您不能访问数组元素的字段,例如:req.body.groups.id
,req.body.groups.title
和req.body.groups.teamMemberIDs
。为了获得嵌套数组中的字段,您必须执行类似req.body.groups[index].id
的操作。
但是不必做所有这些事情,因为您的req.body和猫鼬模式是相同的,因此您可以简单地将整个req.body.groups
传递到groups
中,如下所示。
app.post(`/api/add`, async (req, res) => {
collection.create( { 'id': req.body.id,
'name': req.body.name,
'date': req.body.date,
'groups': req.body.groups //change this line of code.
},
(err, result ) => {
if (err) {
console.log('error', err)
} else {
console.log('updated', result);
res.status(200).send(result);
}
})
});
甚至更好的是,您可以将整个req.body
添加到collection.create()
app.post(`/api/add`, async (req, res) => {
collection.create(req.body,
(err, result ) => {
if (err) {
console.log('error', err)
} else {
console.log('updated', result);
res.status(200).send(result);
}
})
});
如果req.body
和猫鼬模式具有不同的格式,那么对于数组部分,可以使用数组方法map
在创建文档之前更改数组格式。