获取子文档猫鼬的新创建/推送元素的值

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)
                  

               );

            )
    ))

【讨论】:

问题是只获取新创建的元素而不是完整的新列表。

以上是关于获取子文档猫鼬的新创建/推送元素的值的主要内容,如果未能解决你的问题,请参考以下文章

在猫鼬的子数组中获取具有匹配对象的对象

是否可以从猫鼬的文档中获取模型?

如何使子文档在猫鼬的特定日期过期?

如何从猫鼬的另一个集合中计算文档?

查询父项时如何获取猫鼬子文档数组中的值的聚合总和?

我是猫鼬的新手。我想通过添加作为另一个模式的值的字段来修改现有模式?