我正在尝试使用 mongodb 后端的 Blaze,使用 github torrent 作为数据源。
我已经设置了隧道并且可以通过 ssh 隧道访问数据库
ssh -L 27017:dutihr.st.ewi.tudelft.nl:27017 ghtorrent@dutihr.st.ewi.tudelft.nl
from datetime import datetime
from blaze import Data
users = Data("mongodb://ghtorrentro:ghtorrentro@localhost/github::users")
# I can count the number of records in this collection
# following outputs: 5901048
users.count()
# looking at users.dshape, I see a key called 'created_at: datetime,'
现在我正在尝试弄清楚如何根据日期进行查询。
# I tried the following
docs = users[users['created_at'] > datetime(2015, 10, 6)]
# it gives me empty list
compute(docs)
# printing the blaze query gives:
print(compute(docs, post_compute=False)).query
({'$match': {u'created_at': {'$gt': datetime.datetime(2015, 10, 6, 0, 0)}}},)
虽然我知道 pymongo 查询显示我有超过 5000 条记录。一个区别是 pymongo 需要 isoformat 的日期时间,因此需要一个字符串。
pymongo_count = db.users.find({"created_at": {"$gt": datetime(2015, 10, 6).isoformat(), "$lt": datetime(2015, 10, 7).isoformat()}}).count()
以下 blaze 查询返回正确的记录:
compute(users[users["login"] == "sandhujasmine"])
我还尝试使用 isoformat() 作为 datetime 导致此查询:({'$match': {u'created_at': {'$gt': Timestamp('2015-10-06 00:00:00')}}},)
但与它匹配的文档的相同空结果。
我究竟做错了什么?