如何在嵌套文档上创建查找查询?

问题描述 投票:0回答:3

我正在尝试在嵌套集合中查找文档,但是我不知道该如何为此创建查询。在TypeORM文档中,只有一个简单的示例如何在未嵌套的文档上使用find/findOne

我创建了此查询:

const result: BlogEntity = await this.blogRepository.findOne({posts: {_id: article._id}});

但是当我尝试构建项目时,出现此错误:

错误TS2345:类型为'{的参数:{_id:ObjectID; }; }'不可分配给'string |类型的参数编号日期| ObjectID | FindOneOptions |部分”。

所以问题是我应该如何正确创建此查找查询。 BlogEntityArticleEntity下面的代码

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操作。

mongodb typescript nestjs typeorm
3个回答
0
投票

您需要将字符串转换为架构中定义的期望的ObjectID

await this.blogRepository.findOne({posts: {_id: new ObjectID(article._id)}});

Ref


0
投票

[使用nested object's时,需要使用(.)运算符

await this.blogRepository.findOne({'posts._id': article._id});

0
投票

因此不可能在TypeORM中实现这一点。我看到的唯一一种解决方案是将其夹在TypegooseMongoose上。如果您对此问题更感兴趣,可以在这里阅读更多信息:Issue: Query an Array of Embedded Documents #2483

© www.soinside.com 2019 - 2024. All rights reserved.