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

时间:2016-05-22 02:16:39

标签: python mongodb twitter mongodb-query pymongo

试图将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

1 个答案:

答案 0 :(得分:3)

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