根据pymongo中的日期条件从mongodb检索数据 [英] Retrieve data from mongodb based on date condition in pymongo
问题描述
我的MongoDB文档如下:-
My MongoDB document is as follows: -
{
"_id" : 111,
"ts" : [
ISODate("2010-08-21T23:13:35.000Z"),
ISODate("2011-08-23T09:13:10.000Z"),
ISODate("2012-08-26T12:55:51.000Z"),
ISODate("2010-08-29T03:11:12.000Z")
]
}
{
"_id" : 112,
"ts" : [
ISODate("2010-08-21T23:13:35.000Z"),
ISODate("2011-08-23T09:13:10.000Z"),
ISODate("2012-08-26T12:55:51.000Z"),
ISODate("2010-08-29T03:11:12.000Z")
]
}
每个日期条目都表示一个命中".我正在尝试计算每个ID在特定日期范围内的点击次数.
Each date entry indicates a "hit". I am trying to count the number of hits each id had between a certain date period.
查询看起来像:-
db.pgview.aggregate
({$match:{ts:{$elemMatch:{$gte:ISODate("2012-09-01"),$lte:ISODate("2014-09-01")}}}},
{$unwind:"$ts"},
{$match:{ts:{$gte:ISODate("2012-09-01"),$lte:ISODate("2014-09-01")}}},
{$group:{_id:"$_id",count:{$sum:1}}})
这在Mongo Shell上工作正常.但是我试图从Python中检索相同的值,但没有得到任何值. Python代码:-
This works fine on Mongo Shell. But I am trying to retrieve the same from Python for which I am not getting any values. Python code :-
def __init__(self):
self.conn = pymongo.MongoClient()["test"]
self.coll = self.conn.pgview
self.stDate = datetime.datetime.now()
self.endDate = datetime.datetime.now() - datetime.timedelta(days=1000)
print self.stDate
print self.endDate
def fetchData(self):
text = self.coll.aggregate([{"$match":{"ts":{"$elemMatch":{"$gte":self.stDate,"$lte":self.endDate}}}},
{"$unwind":"$ts"},
{"$match":{"ts":{"$gte":self.stDate,"$lte":self.endDate}}},
{"$group":{"_id":"$_id","count":{"$sum":1}}}])
jsondata = text["result"]
for each in jsondata:
try:
print each
except Exception, err:
print traceback.format_exc()
但是它不返回任何结果. 谁能帮忙吗?是因为日期格式吗?
But it does not return any results. Can anyone please help? Is it because of date format?
更新
我确认从mongodb检索的类型为datetime 如果我无条件查询,返回的方式是
I confirmed that the type that is retrieved from mongodb is datetime The way it is returned if i query without any condition is
{u'_id': 111, u'ts': [datetime.datetime(2010, 8, 21, 23, 13, 35), datetime.datetime(2011, 8, 23, 9, 13, 10), datetime.datetime(2012, 8, 26, 12, 55, 51), datetime.datetime(2010, 8, 29, 3, 11, 12)]}
推荐答案
没有运行您的代码.似乎:
Haven't run your codes. Seems:
self.stDate = datetime.datetime.now()
self.endDate = datetime.datetime.now() - datetime.timedelta(days=1000)
应该是:
self.stDate = datetime.datetime.now() - datetime.timedelta(days=1000)
self.endDate = datetime.datetime.now()
这篇关于根据pymongo中的日期条件从mongodb检索数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!