2013-03-26 121 views
2

我有存储在mongodb数据库中的时间序列数据,其中一个字段是ISODate对象。我试图检索ISODate对象的分数和秒数为零的所有项目。也就是说,所有在一个小时内都有时间戳的对象。在mongodb查询中日期/时间/分钟

有没有什么办法做到这一点,或者我需要创建单独的字段小时,分钟,第二,并通过直接查询他们,例如,查找({“分钟”:0,“第二”: 0})?

谢谢!

回答

5

你可以这样做,因为@Devesh说datetime列,或者如果它更贴近您可以使用聚合框架:

db.col.aggregate([ 
    {$project: {_id:1, date: {mins: {$minute: '$dateField'}, secs: {$second: '$dateField'}}}}, 
    {$match: {mins: 0, secs: 0}} 
]); 

像现在这样。

+0

谢谢。这实际上是我正在寻找的,但Devesh的答案可能会导致更好的性能,因为我将运行大量的查询与这些约束。 – user1094206 2013-03-26 14:07:52

+0

@ user1094206事实上,预集合到另一个字段,有选择性地仔细会产生更快和更具可扩展性的结果,但是我不会使用日期时间列,因为MongoDB中只有日期列没有这样的事情,相反,您会安置对象的部分形成一个日期,即:'日期:{小时:1,分钟:0,秒:0}' – Sammaye 2013-03-26 14:11:24

1

您是否可以在集合中添加一列,其中只包含不含分钟和秒的日期时间。它会使您的查询更快,更易于使用。这将是没有分秒部分

+0

这似乎是一个好主意。除非有一种方法可以基于min/sec直接过滤,否则我会继续。 – user1094206 2013-03-26 14:01:29