node.js - 将 MongoDB ObjectID 转换为有效的 id
问题描述
我正在尝试从 MongoDB 中获取这样的文档:
let document = await db.collection('administration').findOne({ _id: result.feedId });
这是result.feedId
:
{
_bsontype: 'ObjectID',
id: Uint8Array(12) [
96, 129, 130, 179, 211,
203, 136, 42, 149, 106,
68, 49
]
}
但是,在尝试这样做时,我遇到了这样的错误:
Error: object [{"_bsontype":"ObjectID","id":{"0":96,"1":129,"2":130,"3":179,"4":211,"5":203,"6":136,"7":42,"8":149,"9":106,"10":68,"11":49}}] is not a valid ObjectId
据我所知,如果_id
是 bson 类型,那么我不需要将其转换为 ObjectId。但是,当我没有转换它时,我得到了这样的错误。
当我尝试转换它时,我收到如下错误:
const { ObjectID } = require('mongodb');
let document = await db.collection('administration').findOne({ _id: ObjectID( result.feedId )});
Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
如何将转换/修复转换result.feedId
为有效 ID?
编辑:
我无法result.feedId
使用result.feedId.toString()
.
当我尝试这样做时,我得到这样的结果:
// console.log(result.feedId.toString());
[object Object]
//console.log(JSON.stringify(result.feedId.toString()));
"[object Object]"
编辑2:
我不知道为什么会发生这种情况,但id
数组中的数组result.feedId
是我正在寻找的。当我尝试转换该十六进制时,我得到了_id
const id = Buffer.from(result.feedId.id).toString('hex');
解决方案
您的 result.feedId 是一个对象,但 _id 不应该是对象,而应该是字符串,正如您发布的错误所暗示的那样。尝试更改您作为 _id 传递的内容。
推荐阅读
- python - 在 Python3 中使用“not in”比使用“in”更快吗?
- cairo - 缩小表面时性能不佳
- c - 如何拒绝字母数字命令行参数(即 ./main 20x),而不是纯数字参数(即 ./main 20)?(在 C 中)
- python - 如果它包含管道,则在熊猫数据框单元格中格式化字符串
- javascript - 订阅 JS 谷歌地图中的数据
- reactjs - React Native Text 组件未呈现
- excel - 使用 VBA Excel 在文本文件中显示搜索文本
- python - 在 conda 环境中安装 pip 包时出错
- c# - Unity3d:通过检查器添加公共脚本
- jenkins - 在 Jenkins 管道中,如何获取在当前构建和上次成功构建之间更改的文件?