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

时间:2019-11-20 21:37:01

标签: mongodb typescript nestjs typeorm

我正在尝试在嵌套集合中查找文档,但是我不知道该如何为此创建查询。在 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操作

2 个答案:

答案 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