当前位置: 首页 > 知识库问答 >
问题:

MongoDb:在数组中推送文档时出错

斜和硕
2023-03-14

我需要后端的帮助。我正在使用邮递员,这是我后端的模型:

name: {
        type: String,
        required: [true, 'Department Name is Required']
    },
    description: {
        type: String,
        required: [true, 'Description is Required']
    },
agents: [
        {
            agentId: {
                type: String,
                required: [true, 'Agent ID is Required']
            },
            createdOn: {
                type: String,
                default: new Date()
            }
        }
]

我试图在代理数组中推送文档,但我遇到了一些错误。

路线和控制器如下:

Routes:
router.post('/enroll', (req, res) => {
    UserController.enroll(req.body).then(result => res.send(result))
});
Controllers:
module.exports.enroll = (params) => {
    return Department.findById({departmentId: params.departmentId}).then(department => {
        department.agents.push({userId: params.userId})

        return department.save().then((department, error) => {
            return (err) ? false : true
        })
    })
}

这就是我得到的错误:(节点:9916)未经处理的PromisejectionWarning:CastError:CastToObjectId值“{departmentId:'60e27549c36af1272812c4e3'}”(类型对象)在模型“Department”的路径“\u id”处失败

目标是寻找部门ID,并将推送我已经获得的代理ID。

共有2个答案

翟越
2023-03-14

谢谢图萨!你帮了大忙。

我能够使用您提供的链接找到答案,并且意识到我在代码本身上犯了一些错误。哈哈哈

I've modified routes to:
router.post('/enroll/:id', (req, res) => {
    const params = {
        departmentId: req.params.id,
       agentId: req.body.agentId
    }
    
    UserController.enroll(params).then(department => res.send(department))
});
Then, some of the lines in my controllers too:
module.exports.enroll = (params) => {
    return Department.findById(params.departmentId).then(department => {
        department.agents.push({agentId: params.agentId})

        return department.save().then((department, error) => {
            return (error) ? false : true
        })
    })
}

它现在正在工作。

乐正远航
2023-03-14

尝试

改变

退货部。findById({departmentId:params.departmentId})

返回Department.findById(params.departmentId)

findById仅接受id而不接受对象

 类似资料:
  • 本文向大家介绍如何在MongoDB中推送数组?,包括了如何在MongoDB中推送数组?的使用技巧和注意事项,需要的朋友参考一下 要推送数组,请在MongoDB中使用$push。首先让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是推送数组的查询- 这将产生以下输出-

  • 我有一个像这样的mongoDB结果。 我需要排序降序。 下面是返回上述结果的查询。我在各个阶段都尝试过使用sort,但没有成功。 需要插入排序操作的地方,按计数降序排序。

  • b)“Units”字段包含带有“period”字段的子文档(日期对象数组),其中给定的日期位于数组中的第一和第二元素之间。 数据结构如下所示: 我尝试使用.find()和.aggregate()的各种组合,例如在periol数组上使用$project和$filter,在unit._id上使用$elemmatch之后使用$elemmatch,但是没有用--我得到了诸如“不能在数组上使用$filter

  • 我试图插入一个json字符串,它包含一个文档数组,但得到以下异常。 MongoDB服务器版本: Mongo-Java驱动程序版本: 我知道方法只用于插入一个文档,但这里是一个数组文档。我不确定在这里如何使用方法。 请引导。 要插入的JSON字符串: 异常日志: main.java GenericUtils.java pom.xml

  • 现在我想做的是将一个GeoStamps列表推送到Mongo中的GeoStamp数组,在那里我首先过滤跟踪器的ObjectId或它的iCAN。然后在文档中发现我需要按日过滤,所以我不会将GeoStamp列表添加到分布在多个日期的多个GeoStamp数组中。 我想可以用下面的方法来做: 我的查询(是的,我知道retrievedFields是不推荐的,我不想使用它,但这是我最接近工作的解决方案): 写入

  • 我是新来的mongo。我有以下收藏。 文件: 请求: 文档集合中的typeId是文档类型的id,其中请求中的typeId是也可以为空的外部字段。如何获得以下输出。