我有一个集合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 ]
}
}
}
])