m0_50180798 2020-11-03 10:22 采纳率: 0%
浏览 38

想问问mongoose操作mongodb中嵌套文档的问题

刚接触时候没想那么复杂,感觉更新就是update,在ctx.request.body中有文档匹配的上的就更新,
没有匹配的上的就不更新。但是后面接触到了嵌套数组,发现好像只要涉及到了嵌套数组内的文档
,更新就变得复杂了很多
举个例子:

async updatecertificate(ctx){
        const {userid = "",certifitecateid =""} = ctx.params
        const {name, certificate_time, certificate_id, valid_period, 
               major, category, licensing_agency, licensing_imageurl}= ctx.request.body
        const user = await User.findById(userid)
        const certifitecate = await User.find({"professionaltitle._id":certifitecateid})
        if(!user || !certifitecate){ctx.body = {message:'用户不存在或者证照不存在'}}

        const succes = await User.update({"_id":userid, "professionaltitle._id":certifitecateid},
        { $set: {'professionaltitle.$.name':name,'professionaltitle.$.certificate_time':certificate_time,
                 'professionaltitle.$.certificate_id':certificate_id, 'professionaltitle.$.valid_period':valid_period, 
                 'professionaltitle.$.major':major, 'professionaltitle.$.category':category,'professionaltitle.$.licensing_agency':licensing_agency, 
                 'professionaltitle.$.licensing_imageurl':licensing_imageurl}})
        ctx.body = succes;
    }

感觉嵌套文档内的修改一定要一个柱对一条梁的感觉,并没有像普通文档那样用update的方法就可以很智能的识别 ctx.request.body中对应文档中的键值对那样,很不方便,不知道有哪位网友有类似的疑惑解决的可以帮忙解惑一下,问题有点低级,别见笑

  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-16 17:09
    关注

    参考GPT和自己的思路:

    你的问题是关于使用Mongoose操作嵌套文档的更新问题。首先,你需要确保你已经在模型中定义了正确的嵌套文档结构。在使用update方法时,你需要指定匹配条件和要更新的内容。

    对于嵌套数组中的文档修改,可以使用 $ 路径占位符来指定要修改的数组元素的位置。例如,在你的示例中,你使用了以下内容来更新数组中的元素:

    'professionaltitle.$.name':name

    在这种情况下,“$”表示professionaltitle数组中与查找条件匹配的元素。这样,你可以更新特定的嵌套文档属性,而不是整个嵌套文档。

    你需要确保你在更新嵌套文档时,适当地使用 $ 路径占位符以便让Mongoose正确地识别出要更新的文档位置。

    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵