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 = 1
和year = 2022
时,不是返回在01/2022之前创建的所有文档,而是returns 从 2022 年初 到 01/2022 结束时创建的文档和创建的文档从 2021 年初 到 01/2021.
结束
如果我选择 02/2022,它将做同样的事情直到 02/ 结束2022 和 01/2021.
知道如何解决这个问题吗?
建议使用 $dateFromParts
来比较您的场景的日期。
db.collection.aggregate([
{
$match: {
$expr: {
$lt: [
"$date",
{
"$dateFromParts": {
"year": 2022,
"month": 2
}
}
]
}
}
}
])
我正在尝试获取在特定月份之前注册的用户:
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 = 1
和year = 2022
时,不是返回在01/2022之前创建的所有文档,而是returns 从 2022 年初 到 01/2022 结束时创建的文档和创建的文档从 2021 年初 到 01/2021.
结束
如果我选择 02/2022,它将做同样的事情直到 02/ 结束2022 和 01/2021.
知道如何解决这个问题吗?
建议使用 $dateFromParts
来比较您的场景的日期。
db.collection.aggregate([
{
$match: {
$expr: {
$lt: [
"$date",
{
"$dateFromParts": {
"year": 2022,
"month": 2
}
}
]
}
}
}
])