【发布时间】:2020-08-16 18:05:30
【问题描述】:
我有一个 mongodb 集合,其中存储购买视频的用户的付款信息
这是内容:
{
"_id" : ObjectId("5ea17279ca73ec19f84ac39a"),
"createdAt" : ISODate("2020-04-23T10:48:25.920Z"), // 23 Apr 2020
"updatedAt" : ISODate("2020-04-23T10:48:25.920Z"),
"accountId" : "0000",
"postId" : ObjectId("5e8da8533efaa66ce53bd3bb"),
"paidBy" : ObjectId("5e92e9ffda29d826d46f7562"),
"paidGet" : ObjectId("5e465194366a412b7107a1c8"),
"chargeId" : "0520114401000000538",
"status" : "Charging",
"isDeleted" : false,
"chargeAmount" : "12",
"transferAmount" : "0",
"postPrice" : "1.00",
"__v" : 0
}
{
"_id" : ObjectId("5ea173a9ca73ec19f84ac39c"),
"createdAt" : ISODate("2020-04-23T10:53:29.957Z"), //23 Apr 2020
"updatedAt" : ISODate("2020-04-23T10:53:29.957Z"),
"accountId" : "0000",
"postId" : ObjectId("5e8da8533efaa66ce53bd3bb"),
"paidBy" : ObjectId("5ea1673bca73ec19f84ac392"),
"paidGet" : ObjectId("5e465194366a412b7107a1c8"),
"chargeId" : "0520114401000000552",
"status" : "Charging",
"isDeleted" : false,
"chargeAmount" : "12",
"transferAmount" : "0",
"postPrice" : "1.00",
"__v" : 0
}
我的问题:
我需要根据 createdAt 字段的日期范围查询集合:
我正在使用$gte 和$lte 进行查询
现在我需要查找 2020 年 4 月 23 日发生的付款
我的查询是:
db.payment.find({"createdAt" : {"$gte" : ISODate("2020-04-22") , "$lte" : ISODate("2020-04-23")}}).pretty()
db.payment.find({"createdAt" : {"$gte" : ISODate("2020-04-23") , "$lte" : ISODate("2020-04-23")}}).pretty()
但是这个查询没有返回任何东西:也就是说,日期范围 22 Apr 20 - 23 Apr 20 && 23 Apr 20 - 23 Apr 20,返回空结果
但是如果我在 4 月 24 日 [22 Apr 20 - 24 Apr 20] 添加额外的一天,则此查询有效
db.payment.find({"createdAt" : {"$gte" : ISODate("2020-04-22") , "$lte" : ISODate("2020-04-24")}}).pretty()
还有这个:[20 年 4 月 23 日 - 20 年 4 月 24 日]
db.payment.find({"createdAt" : {"$gte" : ISODate("2020-04-23") , "$lte" : ISODate("2020-04-24")}}).pretty()
日期 D => 查找日期 = 2020 年 4 月 23 日:
所以我的问题是,如果我给出的日期范围从该日期 D 的前一天开始并在同一日期 D [20 Apr 20 - 23 Apr 20] 结束......没有结果:
如果我在开始和结束时给出相同的日期 D,[20 年 4 月 23 日 - 20 年 4 月 23 日]...没有结果返回
但如果我在结束日期多给了一天,结果就会出现 [22 Apr 20 - 24 Apr 20]
如果开始日期是 D 日期,结束日期是多一天,结果即将到来:[23 Apr 20 - 24 Apr 20]
为什么会出现这种奇怪的匹配?请帮帮我
【问题讨论】:
-
那是因为当你指定像
ISODate("2020-04-23")这样的日期时,它的意思是2020-04-23 00:00:00,因此它将包括那天的记录。
标签: mongodb date mongoose mongodb-query