Mongoose return 个在特定月份之前创建的文档

Mongoose return documents created before a particular month

我正在尝试获取在特定月份之前注册的用户:

const getUsersWhoRegisteredBeforeAGivenMonth = async (month, year) => {
  const project_stage = {
    $project: {
      year: { $year: "$date" },
      month: { $month: "$date" },
    },
  };

  const filter_stage = {
    $match: {
      year: {
        $lte: parseInt(year),
      },
      month: {
        $lte: parseInt(month),
      },
    },
  };

  const pipeline = [project_stage, filter_stage];
  const users = await User.aggregate(pipeline);
  return users;
};

但是,这个returns错误的结果。
month = 1year = 2022时,不是返回在01/2022之前创建的所有文档,而是returns 从 2022 年初01/2022 结束时创建的文档和创建的文档从 2021 年初01/2021.
结束 如果我选择 02/2022,它将做同样的事情直到 02/ 结束202201/2021.

知道如何解决这个问题吗?

建议使用 $dateFromParts 来比较您的场景的日期。

db.collection.aggregate([
  {
    $match: {
      $expr: {
        $lt: [
          "$date",
          {
            "$dateFromParts": {
              "year": 2022,
              "month": 2
            }
          }
        ]
      }
    }
  }
])

Sample Mongo Playground