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 数据类型(null/字符串/数字/日期/内嵌文档/数组等)
MongoDB的文档类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null、布尔、数字、字符串、数组及对象),需要的朋友可以参考下2017-04-04Mongodb在UPDATE操作中使用$push向数组中插入数据的方法
在update操作中,使用$push操作符向数组中插入新的元素,按照相应的语法,使用$push操作符,下面通过本文给大家分享Mongodb在UPDATE操作中使用$push向数组中插入数据的方法,感兴趣的朋友一起看看吧2024-06-06Mongodb启动报错完美解决方案:about to fork child pr
在使用命令行启动 MongoDB 的时候报错:about to fork child process, waiting until server is ready for connections.forked process: 50411,造成这个报错的原因是 “MongoDB” 服务没有正常的关闭,在终端连接非正常断开后,再次执行 MongoDB 的时候报错2023-04-04【MongoDB for Java】Java操作MongoDB数据库
本篇文章现在我们就用Java来操作MongoDB的数据。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-12-12
最新评论