MongoDb日期查询没有使用范围?

时间:2014-01-24 12:43:23

标签: mongodb date

如果我想找到在特定日期创建的文档,那么直到现在我使用了一个范围 从一天的第一分钟到一天中的最后一分钟,就像:

query":{"dtCreated":{"$gte":{"sec":1381356782,"usec":0},"$lt":{"sec":1389356782,"usec":0}}}

是否有可能以某种方式找到只有日,月和年等于“dtCreated”的所有文件?

以伪代码形式:

query:{"dtCreated":ISODate("2014-01-23")} <- i know that may not be a valid iso date 

但我想要的是在不使用lt和gt的情况下查找一天的所有文档?

提前感谢不好的英语和任何提示!

1 个答案:

答案 0 :(得分:1)

您可以使用date aggregation operators使用聚合框架来完成此操作。 假设dtCreated是一个ISODate字段,你可以尝试这样的事情:

query = [
    {
        '$project': {
            'year': {'$year':'$dtCreated'}, 
            'month': {'$month':'$dtCreated'}, 
            'day':{'$dayOfMonth':'$dtCreated'}
        }
    }, 
    {
        '$match' : {'year':'2014', 'month':'1', day:'1'}
    }
]

db.mycollection.aggregate(query)

编辑:作为orid正确评论,虽然这是您的问题的答案(查询日期而不使用日期范围),但这不是解决问题的好方法。我可能会这样做:范围大于或等于今天,但不到明天

db.foo.find({'dtCreated':{'$gte':ISODate("2014-01-23"), '$lt':ISODate("2014-01-24")}})