为什么 FindOne 使用 typeorm 和 mongodb 的 id 不起作用?



我在MongoDB中使用typeorm。当我使用此语法按Id搜索文档时const manager = getMongoManager(); const user = await manager.findOne(User, {userId});我得到了未定义的结果,当我使用const manager = getMongoManager(); const user = await manager.findOne(User, {});时,我得到了第一个语法中预期的userId的结果。

除此之外,相同的语法适用于Id以外的任何其他标准。

模型中Id的声明为:@ObjectIdColumn({ name: '_id' }) @IsNotEmpty() public userId: ObjectID;

目前,我在数据库中只有一个用户具有我搜索的userId。

问题出在哪里?如何解决这个问题?

您应该使用_id而不是id进行查询。在进行查询之前,您还需要将id从字符串转换为MongoDB的ObjectId对象。

require mongodb from 'mongodb';
await manager.findOne(User, { _id: new mongodb.ObjectId(<your _id>)});

当您执行await manager.findOne(User, {});时,您基本上是在选择User集合中的第一个条目,这就是您获得预期用户的原因。

您需要做的是根据_id字段进行查询(如果您有(,或者创建一个自定义字段进行查询,例如:

@Entity()
export class UserEntity
{
@ObjectIdColumn()
_id: string;
@PrimaryColumn()
id: string;
@Column()
public name: string;
}

通过这种方式,您可以进行类似await manager.findOne(User, { _id: <your _id>});的查询

await manager.findOne(User, { id: <your id> });

最新更新