我在UnitSchema中有一个静态方法,它通过一个令牌来查找单元,它将一个令牌作为参数传递给它,然后尝试使用Unit模型上的一个普通findOne方法来查找单元:
UnitSchema.statics.findByToken = async function (token) {
const Unit = this
let unit = await Unit.findOne({ 'Tokens.token': token }).populate('Organisation')
return unit
}
我使用这个方法已经很长时间了,它总是返回正确的对象,现在,它似乎无缘无故地突然返回了一个“完整的”mongoose对象,其中包含了所有额外的信息和函数,并且所有的对象ID现在都是对象格式而不是字符串格式,例如:
ObjectID {
_bsontype: 'ObjectID',
id: <Buffer 5c 85 43 16 f1 ad 70 d8 f8 97 48 78>
}
而不是:
_id: '5d49595246853f14fc5168e9'
因此,我不能再使用正常的填充字段:.populate('field')
而这打破了我的代码。
我已经像疯了一样到处寻找,但不能找到一个解释,因此我不知道如何解决它。帮助是亲切的赞赏!
3条答案
按热度按时间h22fl7wq1#
在您的示例中,即使mongoose查询的行为符合您的预期,它仍然会导致快速服务器错误,因为您无法调用JSON解析器,必须使用JSON解析器返回值。
hmtdttj42#
我知道这是一个迟来的答案。但我最近遇到了这个问题,并做了一些搜索,为什么响应是在一个
Buffer
数组中给出的,而不是一个id
。但我找不到任何有关它的资源。但是,要将
Buffer
转换为id
,只需使用String
或toString()
。xtfmy6hx3#
我以前遇到过同样的问题,但在我的例子中,我忘记填充我试图访问其id的对象。