【问题标题】:Get MongoDB items matching date获取 MongoDB 项目匹配日期
【发布时间】:2015-04-03 17:05:32
【问题描述】:

我正在尝试从 meteor-mongo 匹配日期期间获取已发布项目的计数。

我这样插入了我的帖子日期。

posts
  submitted: new Date()

数据库中的日期格式如下。

yyyy-mm-dd 16:16:34.317Z // I do not understand the last part (what format it is)

我已经试过这个来匹配来自submitted字段的date of today

var currentDate = new Date();
var dd = currentDate.getDate();
var mm = currentDate.getMonth()+1;
var yyyy = currentDate.getFullYear();
var today = yyyy+'-'+mm+'-'+dd;

Posts.find({submitted: today}).count()

但是,最后一部分是返回0

是因为今天最后的 hh,mm,ss 部分丢失了吗?如果是这样,我如何告诉meteor-mongo忽略日期的时间部分以便我可以返回该计数?

【问题讨论】:

    标签: javascript mongodb date meteor


    【解决方案1】:

    我不喜欢处理 JS 日期对象格式,我猜你也是(我不明白最后一部分(它是什么格式)

    试试momentjs packagedocumentation 很清楚。

    所以在插入时你可以有类似的东西。

    var today = moment().format(''MMMM Do YYYY, h:mm:ss a'); // April 3rd 2015, 12:17:06 pm
    Posts.insert({subbmited:today})
    

    然后像这样做一个简单的查找。

    var endQuery = today..add('days', 3).calendar(); // just an example.
    Posts.find({submitted: {$gt: today,$lt:endQuery}})
    

    感谢@Larry Maccherone 点,我们使用$gte(大于)和$lt(小于),所以这就像在提交的帖子日期和提交的帖子日期之间找到我的帖子+ 3 天(就像你问管理范围)

    【讨论】:

    • 啊,我在用momentJS做其他事情,但我没有用它来做这个。连想都没想!谢谢伊桑
    • 我看到这个答案被接受了,但我很担心。您似乎建议他仅将他的答案以日期粒度存储为字符串。这可能非常有效,但我通常建议您以毫秒粒度存储所有事件,但是当您想要提取特定日期时,您可以提供一个范围查询,指定当天的开始和结束日期时间。在 MongoDB 中,您将使用 $gte 和 $lt。
    • @LarryMaccherone 这是一个快速示例,示例代码只是某种演示,这个答案的真正意义在于将他指向时刻包,并展示他能做什么。
    • @Ethaan,我认为最佳答案的关键不是 moment.js,而是你指定了一个不等式,比如 Curtis 的答案。在插入时丢弃信息(例如提交帖子的时间)将实现他的既定目标,但是有一种方法可以保留该细节并仍然通过使用不等式比较 ($gte/$lt) 来实现它,恕我直言。
    • @LarryMaccherone 刚刚对答案做了一点更新
    【解决方案2】:

    您将提交的日期与时间和时区信息一起存储在 MongoDB 中。直接比较您的 currentDate 与 Mongo 中的 submitted 日期永远不会正确,因为您的 currentDate 不包含时间信息。

    另外,您正在使用String 数据类型来查询日期,这也不起作用,因为您需要使用Date 数据类型。像这样的东西对你有用:

    var today = new Date();
    today.setHours(0, 0, 0, 0);
    Posts.find({submitted: {$gt: today}})
    

    这将返回日期大于今天午夜的所有帖子。

    【讨论】:

    • 感谢柯蒂斯的回答。但我打算处理更多格式,下面的答案给了我一个更灵活的解决方案!
    • @Curtis,我认为你走在正确的轨道上,但你可能想指定一个 $gte 和一个 $lt 来拉回特定的一天。如果他想要的只是今天并且数据库中没有未来的日期,那么您的答案将给出预期的结果。使用 $gte 和 $lt 可以为任何一天的所有事件提供更通用的答案。您甚至可以按照我建议的方式为您的“一天”指定一个时区。
    【解决方案3】:

    试试这样的

    posts.find({"submitted": /.*today*/})
    

    【讨论】:

    • /.*today*/ 做了什么?
    猜你喜欢
    • 2020-09-27
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多