MongoDB:忽略聚合查询中数组大小为空的文档

MongoDB:忽略聚合查询中数组大小为空的文档,mongodb,mongodb-query,aggregation-framework,aggregation,Mongodb,Mongodb Query,Aggregation Framework,Aggregation,我有一个变量RoomScont,它是一个按房间数量筛选UI项目列表的过滤器。在数据库中,项目具有作为数组的值室,并存储关于它们的所有数据。这个函数对它们进行排序,但这里我还需要排除没有房间或该字段不存在的项目。如果没有聚合,我找到了一种方法,但是如何在管道中避免它们 async aggregateAll(page, pageSize, filters, sortBy) { const options = { query: new FiltersQuery(filters)

我有一个变量RoomScont,它是一个按房间数量筛选UI项目列表的过滤器。在数据库中,项目具有作为数组的值室,并存储关于它们的所有数据。这个函数对它们进行排序,但这里我还需要排除没有房间或该字段不存在的项目。如果没有聚合,我找到了一种方法,但是如何在管道中避免它们

  async aggregateAll(page, pageSize, filters, sortBy) {
    const options = {
      query: new FiltersQuery(filters),
      select: this.getAttributes(),
      sort: this.parseSortBy(sortBy),
      skip: (page - 1) * pageSize,
      limit: pageSize,
    };

    const query = this.projectModel.aggregate([
      { $match: options.query },
      {
        $addFields: { roomsCount: { $size: { $ifNull: ['$rooms', []] } } },
      },
      { $sort: { roomsCount: -1 } },
      { $skip: options.skip },
      { $limit: options.limit },
      { $project: options.select },
    ]); 

我认为你应该把问题分开

首先,检查是否存在带有$exists的field room

$match: {room:{$exists:true}}
然后检查大小,我认为检查大小时需要使用$addFields,因为使用$size时不能使用$gt

$addFields: { roomSize: {$size:"$room"}},
$match: {roomSize:{$gt:0}}

我可以在聚合查询中添加几个$match吗?是的,您应该删除$addFields,然后添加我的“解决方案”