在MongoDataSource(apollo服务器)中使用String-id而不是ObjectId



我们有一个使用字符串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 ObjectId,这在我们当前的Id格式下是不可能的。

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

findOneById(
id: ObjectId | string,
options?: Options
): Promise<TData | null | undefined>

来源:https://github.com/GraphQLGuide/apollo-datasource-mongodb/blob/master/index.d.ts

我们的用户数据来源:

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)
}

我们不使用猫鼬&打字。

有人有办法让它发挥作用吗?

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

最新更新