我正在创建一个mern应用程序,并且是mongodb / mongoose的新用户。我目前正在我的架构中使用嵌套文档模型。
我能够使用push
在嵌套文档/子文档中创建元素,但我无法将新推送的元素作为post方法的值返回。
模式
var ProjectSchema= new mongoose.Schema({
title:{
type:String,
required:true,
unique:true
},
description:String,
lists: [ListSchema]
})
var ListSchema= new mongoose.Schema({
name: {
type:String,
required:true
}
})
在express api中创建列表
listRouter.post('/api/project/:projectId/list/new', asyncMiddleware(async function(req,res,next){
Project.findById(req.params.projectId, await function(err,items){
items.lists.push(req.body)
items.save();
res.json(items.lists)
})
}))
在创建新列表之后,返回值是给定项目中存在的所有列表的数组,而不仅仅是新创建的列表。我只想要最后创建的列表。
我已尝试items.lists.create(req.body, function(err, item)//...)
而不是push
,但没有回复。除了使用push之外,如何在子文档中创建项目?所以我可以得到新增加的价值。
答案 0 :(得分:0)
在listRouter.post
路由中,您发送的回复为res.json(items.lists)
...此items.lists
是给定项目已存在的项目列表。
您必须在将新列表推送到项目之后发送响应,这将是这样的
listRouter.post('/api/project/:projectId/list/new', asyncMiddleware(async function(req,res,next){
Project.findById(req.params.projectId, await function(err,items){
items.lists.push(req.body)
items.save((err,newitems)=>{
if(err){
res.status(500).json(err)
}
else{
res.status(200).json(newitems.lists)
}
});
})
}))