如果我想找到在特定日期创建的文档,那么直到现在我使用了一个范围 从一天的第一分钟到一天中的最后一分钟,就像:
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的情况下查找一天的所有文档?
提前感谢不好的英语和任何提示!
答案 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")}})