$and/$or/$nor 必须是非空数组聚合

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

我正在尝试应用不同的过滤器和附近的过滤器,但用户也可以跳过所有其他过滤器,只应用附近的过滤器。如果用户也选择标签或美食过滤器,我会得到准确的结果。但是当用户跳过两者时,它会抛出异常。下面是我的代码

const query = [];
if (cuisines) {
  const culinaryOptions = {
    culinaryOptions: { $in: cuisines },
  };
  query.push(culinaryOptions);
}
if (tags) {
  const tag = {
    tags: { $in: tags },
  };
  query.push(tag);
}
if (nearest) {
  maxDistance = 10;
  sort = -1;
}
console.log(query);
return this.restaurantModel.aggregate([
  {
    $geoNear: {
      near: {
        type: 'Point',
        coordinates: [parseFloat(longitude), parseFloat(latitude)],
      },
      distanceField: 'distanceFromMe',
      maxDistance: maxDistance ?? 100 * METERS_PER_MILE, //!*** distance in meters ***!//
      distanceMultiplier: 1 / 1609.34,
      spherical: true,
    },
  },
  {
    $match: {
      $or: query,
    },
  },
  { $unset: ['verificationCode', 'uniqueCode'] },
  { $sort: { location: sort ?? 1 } },
]);

} 如果用户跳过所有其他过滤器

,如何只获得附近的餐馆
node.js mongodb aggregation-framework nestjs aggregate
© www.soinside.com 2019 - 2024. All rights reserved.