NestJS 填充仅填充第一个元素

Posted

技术标签:

【中文标题】NestJS 填充仅填充第一个元素【英文标题】:NestJS populate only populates first element 【发布时间】:2021-05-05 14:37:49 【问题描述】:

我在 NestJS 中有一个 Mongoose 架构,如下所示:


...
@Prop()
  casinoAmount: number;

  @Prop()
  gameHyperLink: string;

  @Prop()
  casinoHyperLink: string;

  @Prop( type: Types.ObjectId, ref: 'Game' )
  games: Game[];

我想进行一个查询,即进行完整的“左连接”。基本上是一个查询,它选择每个 Provider 以及相应游戏中的所有元素。

如果我进行常规查询(没有populate),它将简单地返回所有ObjectID's

    const providers = await this.providerRepository
      .find()
      .skip(offset)
      .limit(limit)
      .exec();

但是当我像这样填充时

    
const providers = await this.providerRepository
      .find()
      .populate('games')
      .skip(offset)
      .limit(limit)
      .exec();

但是,它只返回一个 game 对象,而不是所有对象的列表。

有人知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

首先,当您使用 await 进行查询时,不要使用 exec(),并像这样在填充中使用 skip()limit() 作为选项:

await this.providerRepository.find().populate(
    path:'games',
    options: 
        limit: limit,
        skip: skip

    )

【讨论】:

感谢您的回答。该代码无法正常工作我尝试使用此查询并且它工作const provider = await this.providerModel .findOne() .populate('games', null, Game.name); 但是如果您在填充后使用跳过和限制,它总是返回第一项,对于您的查询,使用跳过和限制,它是否正常工作?

以上是关于NestJS 填充仅填充第一个元素的主要内容,如果未能解决你的问题,请参考以下文章

在一个 django 表单元素上覆盖数据验证

如何使用第一个下拉列表的 onChange 事件填充另一个下拉列表?

如何从 ViewModel 对象填充选择器,设置为第一个元素的初始状态并处理选择选择器项的操作

无法在 NestJS 应用程序中启动并运行猫鼬虚拟填充

NestJs mongoose 嵌套填充未按预期工作

第19课 《框架填充内容》