错误:document 必须是 dict、bson.son.SON、bson.raw_bson.RawBSONDocument 或从 collections.MutableMapping 继承的类型的实例

pyt*_*ent 4 python twitter mongodb pymongo mongodb-query

试图将 twitter 流数据存储到 MongoDB 中。该代码几乎是来自http://stats.seandolinar.com/collecting-twitter-data-storing-tweets-in-mongodb/的副本, 但始终显示错误。如果我尝试打印数据,它会显示 json 文件不断增长,但尽管 while 循环有时间限制,它似乎永远不会结束。!

class listener(StreamListener):

    def __init__(self, start_time, time_limit=60):     
        self.time = start_time
        self.limit = time_limit

    def on_data(self, data):     
        while (time.time() - self.time) < self.limit:    
            try:
                tweet = json.loads(data)
                client = MongoClient('localhost', 27017)
                db = client['twitter_db']
                collection = db['twitter_collection']
                collection.insert_many(tweet)
                return True
            except BaseException, e:
                print 'failed ondata,', str(e)
                time.sleep(5)
                pass
                exit()

    def on_error(self, status):
        print statuses
Run Code Online (Sandbox Code Playgroud)

sty*_*ane 5

您使用错误的方法将文档插入到您的集合中。在您的情况下,json.loads返回一个字典而不是一个list因此您需要使用该insert_one方法插入该单个文档,因为insert_many只插入一个可迭代的文档。