我正在尝试在嵌套集合中查找文档,但是我不知道该如何为此创建查询。在 TypeORM 文档中,只有一个简单的示例如何在未嵌套的文档上使用find/findOne
。
我创建了此查询:
const result: BlogEntity = await this.blogRepository.findOne({posts: {_id: article._id}});
但是当我尝试构建项目时,出现此错误:
错误TS2345:类型为'{的参数:{_id:ObjectID; }; }'不可分配给'string |类型的参数编号日期| ObjectID | FindOneOptions |部分”。
在此之后,我也尝试了:
const result: BlogEntity = await this.blogRepository.findOne({posts: {_id: article._id}});
const result: BlogEntity = await this.blogRepository.findOne({'posts._id': article._id});
const result: BlogEntity = await this.blogRepository.findOne({where: {posts: { _id: article._id}}});
const result: BlogEntity = await this.blogRepository.findOne({where: {'posts._id': _id: article._id}});
const result: ArticleEntity = await this.mongoManager.findOne(ArticleEntity, {_id: article._id});
但是它们都不起作用
所以问题是我应该如何正确创建此查找查询。 BlogEntity 和 ArticleEntity 代码如下
BlogEntity
@Entity()
@ObjectType()
export class BlogEntity {
@Field(() => ID)
@ObjectIdColumn()
_id!: ObjectID;
@Field(() => [ArticleEntity])
@Column()
posts!: ArticleEntity[];
@Field(() => [ArticleEntity])
@Column()
projects!: ArticleEntity[];
@Field(() => [ArticleEntity])
@Column()
tutorials!: ArticleEntity[];
}
ArticleEntity
@Entity()
@ObjectType()
export class ArticleEntity {
@Field(() => ID)
@ObjectIdColumn()
_id!: ObjectID;
@Field()
@Column()
title!: string;
@Field(() => [String])
@Column()
tags!: string[];
@Field()
@Column()
release!: Date;
@Field(() => [SectionEntity])
@Column()
sections!: SectionEntity[];
@Field({ nullable: true })
@Column()
tutorial?: string;
@Field({ nullable: true })
@Column()
app?: string;
}
如果您还需要在评论部分对我进行ping操作
。答案 0 :(得分:0)
使用nested object's
时,您需要使用(.)
运算符
await this.blogRepository.findOne({'posts._id': article._id});
答案 1 :(得分:0)
因此在TypeORM中无法实现这一点。我看到的唯一一种解决方案是将其粘贴到 Typegoose 或 Mongoose 。 如果您对此问题更感兴趣,可以在这里阅读更多信息:Issue: Query an Array of Embedded Documents #2483