【问题标题】:Why does mongoose return object IDs' in the form of an object with an ID as a Buffer instead of string?为什么 mongoose 以对象的形式返回对象 ID,ID 为 Buffer 而不是字符串?
【发布时间】:2019-12-17 12:32:33
【问题描述】:

我的 UnitSchema 中有一个静态方法,它通过令牌查找单元。它通过一个令牌作为参数,并尝试在 Unit 模型上使用普通 findOne 方法查找单元:

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

我用这个方法很久了,它总是返回正确的对象。现在,似乎突然无缘无故,它返回了一个“完整”的猫鼬对象,其中包含所有额外的信息和功能,并且所有对象 ID 现在都是对象格式而不是字符串格式,例如:

ObjectID {
  _bsontype: 'ObjectID',
  id: <Buffer 5c 85 43 16 f1 ad 70 d8 f8 97 48 78> 
}

代替:

_id: '5d49595246853f14fc5168e9'

因此,我无法再使用正常填充字段:.populate('field'),这会破坏我的代码。

我已经疯狂地四处搜索,但找不到对此的解释,因此我不知道如何解决它。非常感谢您的帮助!

【问题讨论】:

    标签: javascript node.js mongoose static mongoose-populate


    【解决方案1】:

    我知道这是一个迟到的答案。但我最近遇到了这个问题,并搜索了为什么响应以Buffer 的数组而不是id 的形式给出。但我找不到任何有关它的资源。

    但是,要将Buffer 转换为id。只需使用StringtoString()

    【讨论】:

      【解决方案2】:

      在您的示例中,即使 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))
      }
      

      【讨论】:

      • 我不确定我是否理解,为什么我需要这样做?它只会返回相同的结果? (刚刚返回的单位已经按预期工作了几个月)
      • 这看起来不像问题的答案。目前尚不清楚为什么这里提到 express 以及 json parse+stringify (性能,是的)如何帮助猫鼬。 -1
      猜你喜欢
      • 2011-08-15
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 2013-02-23
      • 2015-02-13
      • 2021-06-10
      • 2020-12-14
      • 1970-01-01
      相关资源
      最近更新 更多