Мой MongoDB документ выглядит следующим образом: -Получение данных из MongoDB на основе даты в состоянии PyMongo
{
"_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")
]
}
Каждая запись дата указывает на «хит». Я пытаюсь подсчитать количество обращений к каждому идентификатору за определенный период.
запрос выглядит следующим образом: -
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}}})
Это прекрасно работает на Монго Shell. Но я пытаюсь извлечь то же самое из Python, для которого я не получаю никаких значений. Код Python: -
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()
Но это не дает никаких результатов. Может ли кто-нибудь помочь? Это из-за формата даты?
UPDATE
Я подтвердил, что тот тип, который извлекается из MongoDB является DateTime Так оно возвращается, если я запрос без каких-либо условий является
{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)]}
'{ "$ матч": { "ц": { "$ GTE": self.endDate, "$": ЛТР self.endDate}} } '- изменить на' stDate' и 'endDate'. Оба ваших матча аналогичные ошибки. – BatScream
Я действительно изменил это, чтобы проверить некоторые настройки. Он не работает, даже если он является stDate и endDate в соответствующих местах. Вопрос обновлен – Neil