获取子文档猫鼬的新创建/推送元素的值
Posted
技术标签:
【中文标题】获取子文档猫鼬的新创建/推送元素的值【英文标题】:getting the value of the newly created/pushed element of a subdocument mongoose 【发布时间】:2018-07-15 22:03:54 【问题描述】:我正在创建一个 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
,但没有回复。除了使用推送之外,您如何在子文档中创建项目?所以我可以得到新的附加值。
【问题讨论】:
【参考方案1】:在您的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)
);
)
))
【讨论】:
问题是只获取新创建的元素而不是完整的新列表。以上是关于获取子文档猫鼬的新创建/推送元素的值的主要内容,如果未能解决你的问题,请参考以下文章