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

2020-06-17 05:43:06易采站长站整理

'$__original_save': { [Function] numAsyncPres: 0 },
save: { [Function: wrappedPointCut] '$originalFunction': '$__original_save', '$isWrapped': true },
_pres:
{ '$__original_save': [ [Object], [Object], [Object] ],
'$__original_remove': [ [Object] ] },
_posts: { '$__original_save': [], '$__original_remove': [] },
'$__original_remove': { [Function] numAsyncPres: 1 },
remove:
{ [Function: wrappedPointCut] '$originalFunction': '$__original_remove',
'$isWrapped': true },
'$__original_validate': [Function],
validate:
{ [Function: wrappedPointCut] '$originalFunction': '$__original_validate',
'$isWrapped': true } }

以及


{}

很显然,问题就是在这里,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还有另外一些奇怪的地方,被人所诟病,在此也不一一细数了。从问题的发现,到写这篇文章大概花了大半天的时间,以前遇到问题就找到解决办法就停止了,但是这一次通过这样深入地去发现,可能就会发掘到更多的东西。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对软件开发网的支持。