相当于mongo中的mysql日期函数?

时间:2014-06-23 19:16:31

标签: mysql mongodb

如何在Mongo中编写以下SQL查询?

select * from test where date(created)=curdate()

创建的N.B是日期时间字段。

1 个答案:

答案 0 :(得分:0)

使用MongoDB处理此问题的最佳方法是简单地使用具有外部计算日期的范围查询。因此,如果您正在使用当前日期并且想要当天的所有项目:

var start = new Date();
start = new Date( start.valueOf() - start.valueOf() % ( 1000 * 60 * 60 * 24 ) );
end  = new Date( start.valueOf() + ( 1000 * 60 * 60 * 24 ) );

db.collection.find({ "created": { "$gte": start, "$lt": end } });

因此,$gte$lt运算符会根据您计算或提供的值定义要搜索的日期范围。对于其他语言来说,这种方法是相同的,这些语言都有一个日期对象" type"序列化到您的驱动程序所需的BSON。查看驱动程序文档以获取详细信息。

您可以使用评估JavaScript的$where运算符来执行该查询,但不建议这样做。原因在于"范围"已经给出的表单可以使用索引来减少扫描的项目,而JavaScript评估则不能:

db.collection.find(function() {
    var today = new Date();
    today = new Date( today.valueOf() - today.valueOf() % ( 1000 * 60 * 60 * 24 ) );

    return ( 
        ( this.created.valueOf() - this.created.valueOf() % ( 1000 * 60 * 60 * 24 ) )
        == today.valueOf()
   );
})

这基本上等同于SQL语句,但它不如第一种形式有效,因为索引不能用于评估。 SQL也是如此。

因此,请使用范围查询版本,因为它更好,并尝试尽可能避免JavaScript评估。

您可以在手册中找到有关MongoDB术语中常见SQL语句的更多信息: