mongodb - 使用 dateFromString 聚合匹配 Mongodb
问题描述
亲爱的尝试在 mongo 中按日期过滤,但我没有成功。我传递了 JSON 的查询和结构。
db.getCollection('articles').aggregate([
{ "$match": {
"$expr": {
"$and": [
{
"$gte": [
{ "$dateFromString": { "creationDate": "10-08-2018", "format": "%m-%d-%Y" }}
]
},
{
"$lte": [
{ "$dateFromString": { "creationDate": "10-08-2018", "format": "%m-%d-%Y" }}
]
}
]
}
}}
])
我的 JSON 是
{
"_id" : ObjectId("5bbb6b1de75b933850a608fc"),
"title" : "05",
"body" : "asgfasgasfa",
"creationDate" : ISODate("2018-10-08T14:35:07.000Z"),
"operationType" : "C",
"__v" : 0
}
MongoDB:v3.6.3
解决方案
如果您要从日期字段中查找“10-08-2018”的匹配项,您可以将$dateToString与以下内容结合使用$eq
:
db.getCollection('articles').aggregate([
{
"$match": {
"$expr": {
$eq: [
"10-08-2018",
{
"$dateToString": {
"date": "$creationDate",
"format": "%m-%d-%Y"
}
}
]
}
}
}
])
看到它在这里工作
如果您正在寻找与日期范围匹配的一组记录:
db.getCollection('articles').aggregate([
{
"$match": {
"$expr": {
"$and": [
{
"$gte": [
"$creationDate",
{
"$dateFromString": {
"dateString": "10-08-2018",
"format": "%m-%d-%Y"
}
}
]
},
{
"$lte": [
"$creationDate",
{
"$dateFromString": {
"dateString": "11-08-2018",
"format": "%m-%d-%Y"
}
}
]
}
]
}
}
}
])
看到它在这里工作
第二个示例的一个注意事项是,它将日期作为 ISO 日期,因此它不会涵盖11-08-2018日的结束,而是2018-11-08T00:00:00.000Z,正如评论所指出的那样matthPen
。
推荐阅读
- scrapy - 蜘蛛在处理一个项目一小时后停止
- python - Python os.popen 引号内的引号错误
- android - 不要在 android 8.0.0 上隐藏导航抽屉
- graphene-django - DjangoObjectType 的 graphene-django 自定义 get_queryset 不起作用
- c# - 中断以在 Botframework 上运行新对话框
- c# - c# MailMessage 来自电子邮件地址的显示名称不起作用
- python - 如何在打印时返回不带 /n 的字符串
- swift - 突出显示鼠标光标下的 NSWindow
- git - 是否可以还原在 Visual Studio -> Team Explorer -> Git 中所做的撤消更改?
- javascript - 每 2 分钟运行一次的 Nodejs 函数会随着时间的推移而丢失