MongoDB:忽略聚合查询中数组大小为空的文档
我有一个变量RoomScont,它是一个按房间数量筛选UI项目列表的过滤器。在数据库中,项目具有作为数组的值室,并存储关于它们的所有数据。这个函数对它们进行排序,但这里我还需要排除没有房间或该字段不存在的项目。如果没有聚合,我找到了一种方法,但是如何在管道中避免它们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)
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,然后添加我的“解决方案”