Node.js 在MongoDataSource(apollo服务器)中使用字符串id而不是ObjectId

Node.js 在MongoDataSource(apollo服务器)中使用字符串id而不是ObjectId,node.js,mongodb,meteor,apollo-server,apollo-datasource,Node.js,Mongodb,Meteor,Apollo Server,Apollo Datasource,我们有一个使用字符串ID的MongoDB数据库(没有12字节| | 24十六进制) 这些ID由MeteorJS生成 我们现在使用apollo服务器开发一个GraphQL层 我们希望使用apollo数据源mongodb加载数据,但调用findOnebyId方法时,出现以下错误: Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters at new Objec

我们有一个使用字符串ID的MongoDB数据库(没有12字节| | 24十六进制) 这些ID由MeteorJS生成

我们现在使用apollo服务器开发一个GraphQL层

我们希望使用apollo数据源mongodb加载数据,但调用findOnebyId方法时,出现以下错误:

Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
    at new ObjectID (/app/node_modules/bson/lib/bson/objectid.js:59:11)
    at Function.ObjectID (/app/node_modules/bson/lib/bson/objectid.js:40:43)
    at file:///app/connectors/legacy.js:3:21
    at ModuleJob.run (internal/modules/esm/module_job.js:152:23)
    at async Loader.import (internal/modules/esm/loader.js:166:24)
    at async Object.loadESM (internal/process/esm_loader.js:68:5)
/app/node_modules/bson/lib/bson/objectid.js:59
这是因为模块试图将我们的字符串Id转换为MongoDB对象Id,这在我们当前的Id格式中是不可能的

在查看apollo数据源mongodb repo之后,它似乎可以处理字符串Id

    findOneById(
      id: ObjectId | string,
      options?: Options
    ): Promise<TData | null | undefined>
启动(上下文层):

调用(模型层):

我们不使用mongoose&typescript


有人有办法让它工作吗?

我发现它与字符串id不兼容。
可以找到更多详细信息

我发现与字符串id不兼容。 更多细节可以找到

import { MongoDataSource } from 'apollo-datasource-mongodb'

export class Users extends MongoDataSource {
}
Users: new Users(legacy.collection('users'))
async findOneById(obj, { id }, {dataSources: { Users }}) {
  return await Users.findOneById(id)
}