MongoDB$限制在$and内

MongoDB$限制在$and内,mongodb,aggregation-framework,aggregate,Mongodb,Aggregation Framework,Aggregate,我希望实现一个查询,返回一个包含两组数据的JSON 我所寻找的是检索40个订单,其中offerDate仍在未来($gte:today)和8个订单,offerDate在过去 目前我只有未来的40个,就像这样: const orders = await db.Order.aggregate([ { $match: { offerDate: { $gte: moment().startOf('day').toDate(), },

我希望实现一个查询,返回一个包含两组数据的JSON

我所寻找的是检索40个订单,其中offerDate仍在未来($gte:today)和8个订单,offerDate在过去

目前我只有未来的40个,就像这样:

const orders = await db.Order.aggregate([
    {
      $match: {
        offerDate: {
          $gte: moment().startOf('day').toDate(),
        },
      },
    },
    {
      $limit: 40,
    },
我如何才能将限额添加到美元内,并将两者结合在一起

我试过:

$match: {
        $and: [
          {
            offerDate: {
              $gte: moment().startOf('day').toDate(),
            },
            $limit: 40
          },
          {
            offerDate: {
              $lte: moment().startOf('day').toDate(),
            },
            $limit: 8
          },
        ]
      }
    },
但那根本不起作用,我也找不到正确的方法

非常感谢

是一个管道阶段,不能在任何其他阶段中使用,因此您尝试的不是方法。您只需要两个单独的
$匹配项
,后跟
$限制
,操作员允许您这样做:

{
    $facet: {
        greater: [
            { $match: { offerDate: { $gte: moment().startOf('day').toDate() } } },
            { $limit: 40 }
        ],
        lower: [
            { $match: { offerDate: { $lte: moment().startOf('day').toDate() } } },
            { $limit: 8 }
        ]
    }
},
{
    $project: {
        all: { $concatArrays: [ "$greater", "$lower" ] }
    }
}

这看起来很有可能,但有可能在同一个对象中同时得到两个结果吗?@victorgonal当然,请看我修改后的答案。您可以使用$unwind和$replaceRoot进一步操作