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运行状态监控、性能分析工具mongostat详解

    MongoDB运行状态监控、性能分析工具mongostat详解

    这篇文章主要介绍了MongoDB运行状态监控、性能分析工具mongostat详解,mongostat是mongdb自带的状态检测工具,在命令行下使用,它会间隔固定时间获取mongodb的当前运行状态,并输出,本文详细讲解了它的使用,需要的朋友可以参考下
    2015-07-07
  • Windows系统下安装MongoDB与Robomongo环境详解

    Windows系统下安装MongoDB与Robomongo环境详解

    这篇文章主要给大家介绍了在Windows系统下安装MongoDB与Robomongo环境的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-04-04
  • MongoDB的备份(mongodump)与恢复(mongorestore)

    MongoDB的备份(mongodump)与恢复(mongorestore)

    在使用MongoDB时,数据备份与恢复是非常重要的一环,以防止数据丢失或意外删除,本文就来介绍一下MongoDB的备份(mongodump)与恢复(mongorestore),感兴趣的可以了解一下
    2023-12-12
  • centos离线安装mongodb-database-tools方法详解

    centos离线安装mongodb-database-tools方法详解

    这篇文章主要介绍了centos离线安装mongodb-database-tools方法详解的相关资料,需要的朋友可以参考下
    2022-11-11
  • CentOS 安装 Mogodb的步骤(在线&&离线两种)

    CentOS 安装 Mogodb的步骤(在线&&离线两种)

    这篇文章主要介绍了CentOS 安装 Mogodb的步骤(在线&&离线两种),需要的朋友可以参考下
    2017-03-03
  • MongoDB数据库文档操作方法(必看篇)

    MongoDB数据库文档操作方法(必看篇)

    下面小编就为大家带来一篇MongoDB数据库文档操作方法(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • MongoDB如何查看版本信息详解

    MongoDB如何查看版本信息详解

    这篇文章主要给大家介绍了关于MongoDB如何查看版本信息的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • MongoDB如何正确中断正在创建的索引详解

    MongoDB如何正确中断正在创建的索引详解

    这篇文章主要给大家介绍了关于MongoDB如何正确中断正在创建的索引的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • MongoDB分片的实现示例

    MongoDB分片的实现示例

    MongoDB的分片是一种横向扩展数据库的方式,可以将数据分散存储在多台服务器上,从而提高数据库的处理能力和可用性,本文就来介绍一下如何实现,感兴趣的可以了解一下
    2023-12-12
  • MongoDB分片集群部署详解

    MongoDB分片集群部署详解

    这篇文章主要介绍了MongoDB分片集群部署详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05

最新评论