Mongoose find 查询返回json数据处理方式

 更新时间:2023年04月05日 15:00:22   作者:yolo莹  
这篇文章主要介绍了Mongoose find 查询返回json数据处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

前言

Mongoose find方法,打印看着返回的是json数据,实际返回的是Mongoose实例,为了方便自定义拓展或操作链式操作。

需求

如图复制按钮,点击复制按钮填写信息,复制出有相同属性的数据模型;

处理思路

传参:{id:"", //被复制的数据模型id ...(其他填写参数) };通过id查询被复制数据模型所有数据,删除数据id,删除属性id,其他填写参数覆盖,然后写库。

遇到问题

代码如下,执行时,直接报堆栈溢出,获取的modalData不是json数据不能modalData.props或{...modalData}

  /**
   * 根据id查询数据模型
   * @param id 数据模型id
   */
  async findById(id: string | string[]) {
    let res
    try {
      if (Array.isArray(id)) {
        res = await this.dataModel.find({ _id: { $in: id } })
      } else {
        res = await this.dataModel.findById(id)
      }
    } catch (error) {
      throw new HttpException(error, HttpStatus.INTERNAL_SERVER_ERROR)
    }
    return res;
  }
 
/**
   * 复制数据模型
   * @param dataModel 数据模型
   */
  async copyDataModal(dataModel: CopyDataModelDto) {
    let res
    try {
      const { id } = dataModel
      const modalData = await this.findById(id)
      if (modalData) {
        modalData.props = (modalData.props || []).map((ele: any) => {
          return dataMasking(ele, ['_id'])
        })
        const addData = dataMasking({ ...modalData, ...dataModel }, ['_id', 'id', '__v'])
        // res = await this.add(addData)
        res=addData
      }
      
 
    } catch (error) {
      throw new HttpException(error, HttpStatus.INTERNAL_SERVER_ERROR)
    }
    return res
  }

解决方案

1.modalData=JSON.parse(JSON.stringify(modalData))处理一遍

缺点:数据复杂时会导致部分数据丢失或转义

2.Mongoose find 查询时用.toObject()或.toJSON()将数据转换为json,修改findById方法的return;

return res?res.toObject():res
return res?res.toJSON():res

3.Mongoose find 查询后.lean().exec()链式处理

async findById(id: string | string[]) {
    let res
    try {
      if (Array.isArray(id)) {
        res = await this.dataModel.find({ _id: { $in: id } }).lean().exec()
      } else {
        res = await this.dataModel.findById(id).lean().exec()
      }
    } catch (error) {
      throw new HttpException(error, HttpStatus.INTERNAL_SERVER_ERROR)
    }
    return res
  }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MongoDB通配符索引的用法实例

    MongoDB通配符索引的用法实例

    这篇文章主要给大家介绍了关于MongoDB通配符索引的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Mongodb自增id实现方法

    Mongodb自增id实现方法

    这篇文章主要介绍了Mongodb自增id实现方法,分析了MongoDB数据库自增ID的原理与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • Mongodb使用$bit方法更新字段的代码详解

    Mongodb使用$bit方法更新字段的代码详解

    Mongodb的UPDATE提供了各种各样的方法,包括字段数值增加,数组更新等,本文介绍Mongodb使用$bit方法更新字段,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-06-06
  • Mongodb批量删除gridfs文件实例

    Mongodb批量删除gridfs文件实例

    这篇文章主要介绍了Mongodb批量删除gridfs文件实例,本文根据生产环境实际需求总结而来,需要的朋友可以参考下
    2015-01-01
  • mongodb操作的模块手动封装

    mongodb操作的模块手动封装

    这篇文章主要介绍了mongodb操作的模块手动封装的相关资料,这里提供实例帮助大家实现这样的功能,需要的朋友可以参考下
    2017-08-08
  • mongodb基础之用户权限管理实例教程

    mongodb基础之用户权限管理实例教程

    这篇文章主要给大家介绍了关于mongodb基础之用户权限管理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • MongoDB查询性能优化验证及验证

    MongoDB查询性能优化验证及验证

    这篇文章主要介绍了MongoDB查询性能验证及优化的相关知识,涉及到MongoDB 查询优化原则知识点,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-02-02
  • Pycharm连接MongoDB数据库安装教程详解

    Pycharm连接MongoDB数据库安装教程详解

    这篇文章主要介绍了Pycharm连接MongoDB数据库安装教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • MongoDB TTL索引的实例详解

    MongoDB TTL索引的实例详解

    这篇文章主要介绍了 MongoDB TTL索引的实例详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • 为MongoDB数据库注册windows服务

    为MongoDB数据库注册windows服务

    这篇文章介绍了为MongoDB数据库注册windows服务的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论