MongoDB获取日期月份等于特定月份的文档



我有一个集合vacation,看起来像这样:

[
{
_id: ..
employeeId: ...
type: ...
startDate:2022-09-10T00:00:00.000+00:00
endDate: 2022-09-15T00:00:00.000+00:00
}
{
_id: ..
employeeId: ...
type: ...
startDate:2022-01-10T00:00:00.000+00:00
endDate: 2022-02-15T00:00:00.000+00:00
}
{
_id: ..
employeeId: ...
type: ...
startDate:2022-03-10T00:00:00.000+00:00
endDate: 2022-04-15T00:00:00.000+00:00
}
]
...

我只想在startDate中的月份等于特定月份时获取文档


const Vacation = require("../models/Vacation");
const vacations = await Vacation.find({// where month in startDate is equal to 2})

如何执行这样的查询?提前感谢

您可以编写这样的聚合查询:

const vacations = await Vacation.aggregate(
[
{
"$match": {
$expr: {
"$eq": [
{
"$month": {
"$dateFromString": {
"dateString": "$startDate",
}
}
},
3
]
}
}
},
]
);

在这里,我们使用$dateFromString运算符从字符串中构造一个日期对象,然后使用$month查找月份值。然后,我们使用$eq执行相等比较。点击此处了解更多关于MongoDB聚合操作的信息。请参阅此处的上述查询。

正如我的评论中所提到的,当正确存储日期值时,您不需要$dateFromString

db.collection.aggregate([
{
"$match": {
$expr: {
"$eq": [{ "$month": "$startDate" }, 3 ]
}
}
}
])

最新更新