如何编写Mongo查询以查找两个日期之间的视频详细信息

时间:2014-05-22 09:57:28

标签: mongodb

在我的mongodb中有一个视频集合,其中有一个如下所示的creationTime列表,我想使用creationTime在任意两个日期之间获取记录。

"创建时间" :{          " logTime Description该条" :ISODate(" 2013-08-12T10:54:44.914Z"),          " logtimeStr" :" 12-08-2013 04:24:44",          "天" :12,          "一个月" :8,          "一年" :2013年,          "小时" :16,          "分钟" :24,          "第二" :44  }

2 个答案:

答案 0 :(得分:1)

编写范围查询的一​​种更好的方法,并且只是提到 $and 在MongoDB中是隐式的,只需要在实际需要它的特定情况下使用:< / p>

db.collection.find({
    "creationTime.logtime": { 
        "$gt": new Date("2014-08-01"), "$lt" new Date("2014-08-13") 
    }
})

至少这是范围查询的理论。但目前您有一个非常大的问题,那就是您的日期实际上存储为字符串

这是一个很大的问题,因为基本上当这些是字符串时(尤其是当前格式化它们)然后你会遇到字符串的词法比较,并且你必须在一个存在的意义上对字符串进行词法比较。 &#34;更大&#34;价值比其他。

字符串需要以&#34; year&#34;的顺序呈现。然后&#34;月&#34;那么&#34; day&#34;和两个数字表示以匹配词汇比较。你目前没有。

但是不要更改字符串,将它们更改为正确的日期类型,然后显示的查询将实际正常工作。

答案 1 :(得分:0)

使用Mongodb比较运算符$lt$gt(或$ lte&amp; $ gte表示包含限制)

如何创建START_DATE和END_DATE取决于您使用的语言。例如。对于javascript,您可以使用new Date()

db.myVideoCollection.find({
 '$and':[
          {'$creationTime.logtime':{'$gt':START_DATE },
          {'$creationTime.logtime':{'$lt':END_DATE }
        ]
 })