monoose返回对象无法比较ObjectId
在使用 mongoose
时遇到这样一个坑,Schema
定义如下:
1 | { |
当我使用===
比较集合中两个 ObjectId 时,始终为
false
。
这是我的比较语句的主要部分:
1 | const departments = await this.ctx.mode('Department').find({}) |
在查找第一个部门的父部门时,始终找不到(父部门是存在的)。
后面通过排查,才发现,原来通过 find()
查找出来的对象是
mongoose
自己的包装过的对象,上面的 _id
和
parentId
也是一个ObjectId
对象,所以直接用
===
比较时,始终返回
false
,导致不能找到结果。
找到问题的原因后,直接将 ObjectId
转成字符串比较就可以了。
1 | const parentDp = departments.find(dp=>dp._id.toString()===firstDp.parentId.toString()) |