NodeJS 为什么mongoose返回的对象ID '以一个带有ID的对象的形式作为Buffer,而不是字符串?

lp0sw83n  于 2022-12-29  发布在  Node.js
关注(0)|答案(3)|浏览(147)

我在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')而这打破了我的代码。
我已经像疯了一样到处寻找,但不能找到一个解释,因此我不知道如何解决它。帮助是亲切的赞赏!

h22fl7wq

h22fl7wq1#

在您的示例中,即使mongoose查询的行为符合您的预期,它仍然会导致快速服务器错误,因为您无法调用JSON解析器,必须使用JSON解析器返回值。

UnitSchema.statics.findByToken = async function (token) {
  const Unit = this
  let unit = await Unit.findOne({ 'Tokens.token': token }).populate('Organisation')
  return JSON.parse(JSON.stringify(unit))
}
hmtdttj4

hmtdttj42#

我知道这是一个迟来的答案。但我最近遇到了这个问题,并做了一些搜索,为什么响应是在一个Buffer数组中给出的,而不是一个id。但我找不到任何有关它的资源。
但是,要将Buffer转换为id,只需使用StringtoString()

xtfmy6hx

xtfmy6hx3#

我以前遇到过同样的问题,但在我的例子中,我忘记填充我试图访问其id的对象。

相关问题