位置: 编程技术 - 正文

Mongoose中document与object的区别示例详解

编辑:rootadmin

推荐整理分享Mongoose中document与object的区别示例详解,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

本文主要给大家总结介绍了关于Mongoose中document与object区别的相关内容,分享出来供大家参考学习,其实这个问题其实是mongoose非常常见的问题,经常有很多以前没遇到这个问题的人都会被这个问题弄得怀疑人生。

我们先介绍一些问题的背景。

先看下面一段代码:

在第一段代码中,通过model.find我们应该能够获取到根据queryCriteria获取的结果,结果应该是一个对象数组,类似于这样:

预期index.ejs应该渲染的页面是一个ul渲染的结果,类似于

2室1厅 2室2厅

当然,理想很丰满,现实很骨感。我就是死活渲染不出来doc.type。照理说应该是不可能的,在index.ejs中doc就是一个对象,我为什么不能获取doc的type属性呢?这不合理,太不合理了!

老实说,这个问题我之间也是遇到过,当初我是想修改这个doc的属性,但是死活没有办法修改,当初也是花了很久找到原因。这次我就把这个问题好好地研究一下。

先说结果,以及解决方法把。我比较喜欢剧透。愿意是因为再次返回的doc是属于Document的实例,而不是一个普通的对象。也就是说它和普通的对象是不一样的,它没有普通对象的一些方法,普通对象也没有它身上的一些方法。

解决方案有几种,不过究其根本都是将这种document转化为普通的对象:

方法1:

利用toObject方法

Mongoose中document与object的区别示例详解

方法2:

利用JSON方法,这是我想到的一个方法,具体深层原因在这就不展开了:

方法3:

利用lean方法:

上述的三种方法应该都能成功将find获取的结果转化为普通的对象。

但是我还想知道到底document和一个普通的对象到底有什么区别,区别在哪里呢?

我们假设find获取的结果是docs,转化为普通对象的结果是docs1。现在我们就看一看这二者的区别。理论上docs和docs1都应该是数组,而它们中元素都应该是一个对象,我们先来看看是不是这样呢?

我们通过上述方法可以获取docs以及docs1的类型以及其中元素的类型,结果是:

和我们预想中的一模一样,那问题不在这,那我们就探究探究docs[0]以及docs1[0]的原型把,看看它的原型到底是什么呢?知道JS的人,应该都知道JS中的原型链。在此,我们就通过__proto__来粗暴地获取对象的原型:

结果是:

以及

很显然,问题就是在这里,docs[0]和docs[0]的原型并不是一个东西。而js中对象通过.或者是[]访问属性都是调用了Object中的某个方法,但具体什么方法我不太记得。然而docs中的原型或者其原型的原型也是没有这个方法的,因此他就没办法去访问这个属性。

其实docs[0].__proto__.__proto__是Model,docs[0].__proto__.__proto__.__proto__是Document,docs[0].__proto__.__proto__.__proto__.__proto__才是{}。

至此,这个问题引起的一系列的探究也是告一段落了。其实Mongoose还有另外一些奇怪的地方,被人所诟病,在此也不一一细数了。从问题的发现,到写这篇文章大概花了大半天的时间,以前遇到问题就找到解决办法就停止了,但是这一次通过这样深入地去发现,可能就会发掘到更多的东西。

总结

标签: Mongoose中document与object的区别示例详解

本文链接地址:https://www.jiuchutong.com/biancheng/379504.html 转载请保留说明!

上一篇:Nodejs+express+ejs简单使用实例代码

下一篇:Express使用html模板的详细代码(express.js教程)

  • 创业投资企业可以按照其对中小高新技术企业投资额的
  • 企业境外参展 人员成本
  • 企业所得税纳税人
  • 企业所得税季度预缴怎么计算
  • 甲方给的工程奖项有哪些
  • 建筑施工企业的法定代表人对本企业的安全生产负责
  • 经常性支出是什么意思
  • 会计利润包不包括营业外支出
  • 当月发票未收到怎么办
  • 亏本销售商品如何做其会计分录?
  • 哪些费用可以进项抵扣
  • 没有发票的管理费用汇算清缴的时候怎么调出来
  • 原始股 出售
  • 商铺租金收入税是多少税率
  • 开票软件维护费计入什么科目
  • 财政补助结转余额在借方还是贷方
  • 社会团体非限定性净资产
  • 什么情况下从价计征房产税
  • 敏感资产额怎么算
  • 子公司是否可以共享总公司的资质
  • 债务转为资本什么意思
  • 固定资产转移是什么意思
  • macbook设置壁纸后开机变回原样
  • win10怎么看电脑名称
  • Linux /bin, /sbin, /usr/bin, /usr/sbin 区别
  • php的array_multisort()使用方法介绍
  • 库存现金清查主要包括哪些内容
  • 短期投资需要结转吗
  • vue跳转到外部链接且带上参数
  • 发票联和抵扣联区别
  • 个体工商户年报逾期怎么办
  • 浅谈php中的错误处理方法
  • 图文详解水的画法
  • 增值税发票认证抵扣时间规定
  • 个人开发微信支付接口
  • imu定位
  • sklearn average precision
  • 用html语言完成以下内容
  • 在vue3项目中使用vue2
  • 免征增值税账务怎么处理
  • 残保金补申报后处罚会自动取消吗
  • 交易性金融资产处置时的会计核算步骤
  • 补交地税多少钱
  • 电力安装有前途吗
  • 质保金挂账是否需要发票
  • 预计资产负债表和预计利润表构成了整个财务预算
  • mysql恢复备份文件
  • mysql insert语句操作实例讲解
  • 印花税的征税对象和计税依据
  • 购买软件使用费计入什么科目
  • 营改增后建筑业怎么开票
  • 机械设备预付款比例
  • 供应商来货怎么做会计分类
  • 冲回上月暂估入账的商品会计分录
  • 利润分配明细科目有哪些
  • 购买材料如何计提折旧
  • 技术开发技术服务属于什么行业
  • 货已经收到未收到怎么办
  • 管理成本分摊比例是多少
  • 收到增值税发票后该如何处理啊?
  • 财产租赁合同印花税计税依据
  • 待处理财产损益是备抵类科目吗
  • 收到不是股东的现金
  • sql语句查询去重
  • win7系统如何查看文件扩展名
  • WZCSLDR.exe - WZCSLDR是什么进程
  • win8升级win10系统 激活
  • aliwssv.exe是什么进程
  • win7如何ghost
  • 使用css实现全兼容的方法
  • jquery cookie使用
  • JavaScript+html5 canvas实现图片破碎重组动画特效
  • JavaScript中的变量名不区分大小写
  • javascript面向对象精要pdf
  • 国家税务总局核定的该车最低计税价格
  • 2008年国家公务员考试时间
  • 税局可以办理哪些业务
  • 天津国税发票查询真伪查询
  • 签订设计合同
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设