【问题标题】:i am not getting data till today date in mongodb using $gte我直到今天才使用 $gte 在 mongodb 中获取数据
【发布时间】:2020-04-12 04:12:29
【问题描述】:

我想要的是让在日期范围内创建帐户的用户,并且还希望为这些新客户获得订单数大于 1 的客户,所以我正在做的是试图获得数据大于上个月,即 2020 年 3 月 1 日,但输出给我的用户直到 4 月 1 日,为什么不到今天,即 4 月 11 日,数据格式如下

"_id" : ObjectId("1dv47sd1a10048521sa1234d"),
"updatedAt" : ISODate("2020-04-01T16:19:26.460+05:30"),
"createdAt" : ISODate("2020-04-01T16:18:46.066+05:30"),
"email" : "edx@gmail.com",
"phone" : "xxxxxxxxxx",
"password" : "$awdad$2b$10$4YaO6AEZqXA9ba0iz14ALi",
"dob" : "00/20/1990",
"stripeID" : "xxxxxxxxxxxxxxxx",
"__t" : "Customer",
"banned" : false,
"picture" : "link to image",
"name" : {
    "first" : "ababab",
    "last" : "Saaa"
},
"orderCount" : 2,
"creditCards" : [ ],
"addresses" : [ ],
"__v" : 0,
"isEmailVerified" : true

我已经编写了一个查询,用于从大于上个月的日期提取数据,但它给我的数据直到 4 月 1 日,我的查询如下

db.users.find({
  "createdAt" : { "$gte" :new Date("2020-03-1") }
})

所以我想从 2020 年 3 月 1 日起今天获取数据 timm,订单数量也超过 1,提前感谢我是 mongo 的新手

【问题讨论】:

  • 使用此示例查找日期范围内的数据:find - Query for Ranges。使用$and 运算符指定多个条件(如日期和订单计数条件)。
  • @prasad_ 我已经尝试过了,但仍然显示 2020 年 1 月 4 日之前的数据(db.users.find({ createdAt : { $gt :new Date("2020-03-1") , $lt: new Date("2020-04-11") } }))
  • 你说的不清楚。你能用更多细节更新你的帖子吗?您的输入数据和查询是什么?您只能包含几个必填字段。 您正在查询日期之间的数据 01-March-202011-April-2020
  • @prasad_ ia 已更新并澄清了更多内容,如果有帮助,请查看,谢谢
  • 集合中是否包含 createdAt 值大于 2020 年 4 月 1 日的文档?

标签: mongodb


【解决方案1】:

MongoDB 只存储绝对时间(也就是时间戳或日期时间),而不是日期。因此,查询通常也应使用时间而不是日期来指定。

此外,MongoDB 始终以 UTC 存储时间。不同的系统可以在不同的时区运行。例如,shell 可能在与您的应用程序不同的时区运行。

使用日期查询:

  1. 确定日期所在的时区。
  2. 将日期转换为该时区的时间。例如,2020-03-01 00:00:00 UTC - 2020-03-31 23:59:59 UTC2020-03-01 00:00:00 -0400 - 2020-03-31 23:59:59 -0400 都是“March”,将匹配不同的文档集。
  3. 将时间转换为 UTC。这可能是您正在使用的框架或库为您处理的事情,例如 Ruby 中的 Mongoid 就是这样做的。
  4. 使用 UTC 时间构建 MongoDB 查询。

这在文档here 中有说明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2019-12-05
    • 2021-08-29
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    相关资源
    最近更新 更多