Node.js 在MongoDataSource(apollo服务器)中使用字符串id而不是ObjectId
我们有一个使用字符串ID的MongoDB数据库(没有12字节| | 24十六进制) 这些ID由MeteorJS生成 我们现在使用apollo服务器开发一个GraphQL层 我们希望使用apollo数据源mongodb加载数据,但调用findOnebyId方法时,出现以下错误: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
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)
}