【问题标题】:How to convert _bsontype objectID value to string/objectID to insert in mongoDB using node.js如何使用 node.js 将 _bsontype objectID 值转换为 string/objectID 以插入 mongoDB
【发布时间】:2020-05-18 23:43:43
【问题描述】:

我有一个 JSON 文件,其中包含如下对象。

{
    userID: {"_bsontype":"ObjectID","id":{"0":92,"1":237,"2":216,"3":42,"4":254,"5":178,"6":68,"7":182,"8":208,"9":254,"10":51,"11":64}},
    userName: "abc"
}

注意:还有一些嵌套字段,比如 userID。

尝试使用批量插入导入 MongoDB 时出现错误

UnhandledPromiseRejectionWarning: Error: object [{"_bsontype":"ObjectID","id":{"0":92,"1":237,"2":216,"3":42,"4":254,"5":178,"6":68,"7":182,"8":208,"9":254,"10":51,"11":64}}] is not a valid ObjectId

如何将 userID 转换为 objectID/string?喜欢ObjectId("5d1de1bab90f8bf15f58df3f")"5d1de1bab90f8bf15f58df3f"

DB 中的预期输出:

{
    userID: ObjectId("5d1de1bab90f8bf15f58df3f"),
    userName: "abc"
}

{
    userID: "5d1de1bab90f8bf15f58df3f",
    userName: "abc"
}

【问题讨论】:

  • 对象 ID 的字符串从何而来?
  • DB 中预期的对象 ID 的字符串,并从 JSON 文件 @JackBashford 读取
  • 你能控制JSON文件的输出吗?还是您想保持这样的 JSON 输出并在输入阶段对其进行修复?

标签: javascript node.js mongodb objectid


【解决方案1】:

谢谢大佬,

你让我走上了正轨。只是为了它。这是我的效用函数。冗长但有效。

const { ObjectID } = require( 'mongodb' )

  toObjectID: function ( object ) {
    let hexString = ''
    Object.values(object.id).forEach(elem =>{
      const result = elem.toString(16)
      if(result.length === 2) {
        hexString += result
      } else {
        hexString += "0" + result
      }
    })
    const id = new ObjectID(hexString)
    return id
  }

【讨论】:

    【解决方案2】:

    我能够解决插入 ObjectID 的类似情况。这些步骤——尽管似乎是针对这种情况的迂回——将实现目标:

    1。将 id 从 base10 整数数组转换为 base16 字符串:

    const idString = obj.userID.id.map(num => {
      var result = num.toString(16);
      return result.length == 2 ? num : "0" + num;
    })
    .join('');
    

    2。从字符串创建对象 ID:

    const _id = ObjectID(idString);
    

    3。转换回字符串 在插入或更新文档时,从 ObjectID 转换回 mongodb 期望的 ObjectID() 形式:

    _id.toString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 2022-01-02
      • 2021-05-05
      相关资源
      最近更新 更多