获取子文件mongoose的新创建/推送元素的值

时间:2018-02-05 23:02:03

标签: express mongoose subdocument

我正在创建一个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之外,如何在子文档中创建项目?所以我可以得到新增加的价值。

1 个答案:

答案 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)
                  }

               });

            })
    }))