首页 > 解决方案 > 将 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');

标签: node.jsmongodbmongoose

解决方案


您的 result.feedId 是一个对象,但 _id 不应该是对象,而应该是字符串,正如您发布的错误所暗示的那样。尝试更改您作为 _id 传递的内容。


推荐阅读