簡體   English   中英

Pymongo:bson.errors.InvalidDocument:無法編碼對象: <pymongo.cursor.Cursor object at 0xc61990>

[英]Pymongo: bson.errors.InvalidDocument: Cannot encode object: <pymongo.cursor.Cursor object at 0xc61990>

我試圖將使用Pymongo的字典插入MongoDB集合中。 該代碼段是

newdict = {'id': a, 'usr_id': i.get('user_id'), 'reach_value': mycount, 'initfc': initfc}
myid = reach.insert(newdict)

所有變量名都具有有效值的位置。 但是我在執行時遇到此錯誤:

/usr/lib64/python2.7/site-packages/pymongo/collection.py:362: RuntimeWarning: couldn't encode - reloading python modules and trying again. if you see this without getting an InvalidDocument exception please see http://api.mongodb.org/python/current/faq.html#does-pymongo-work-with-mod-wsgi
  self.database.connection)
Traceback (most recent call last):
  File "get_reach.py", line 46, in <module>
    myid = reach.insert(newdict)
  File "/usr/lib64/python2.7/site-packages/pymongo/collection.py", line 362, in insert
    self.database.connection)
bson.errors.InvalidDocument: Cannot encode object: <pymongo.cursor.Cursor object at 0x18e9990>

我不明白這是什么意思,有人可以幫忙嗎?

編輯: -

print mydict正在顯示

{'usr_id': 89443197, 'initfc': <pymongo.cursor.Cursor object at 0x13c0990>, 'reach_value': 0, 'id': 429127873031831552L}

所以我試圖將pymongo光標更改為一個列表,新的回溯是:

碼:-

from pymongo import MongoClient
from twython import Twython
client = MongoClient()
db = client.PWSocial
reach = db.reach
tweets = db.tweets
id_list = [57947109, 183093247, 89443197, 431336956]
APP_KEY = 'xx'
APP_SECRET = 'xx'
OAUTH_TOKEN = 'xx'
OAUTH_TOKEN_SECRET = 'xx'
dict = tweets.find()
twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
for i in dict:
    if i.get('user_id') in id_list:
        a = i.get('id')
        mycount = 0
        #print a
        hasrt = list(db.retweets.find({'id': a}))
        #print hasrt
        test = list(reach.find({'id': a}))
        if hasrt and test:
            mylist = (twitter.get_retweeters_ids(id = i.get('id')))
            print mylist
            for var in mylist:
                RTer = twitter.show_user(user_id = var)
                mycount  = mycount + RTer.get("followers_count")
                init = test.get('initfc')
            diff = list(db.follower_count.find({'id': i.get('user_id')}))  - init
            mycount = mycount + diff
            initfc = list(db.follower_count.find({'id': i.get('user_id')}))
            #initfc = initf 
        elif hasrt:
            mylist = twitter.get_retweeters_ids(id = a)
            for var in mylist:
                RTer = twitter.show_user(user_id = var)
                mycount  = count + RTer.get("followers_count")  
            mycount = mycount + list(db.follower_count.find({'id': i.get('user_id')})) 
            initfc = list(db.follower_count.find({'id': i.get('user_id')}))

        else:
            mycount = list(db.follower_count.find({'id': i.get('user_id')})) 
            initfc = list(db.follower_count.find({'id': i.get('user_id')}))
            #initfc = initf 
        if test:
            reach.update({'id': a}, {'$set': {{ 'initfc': initfc }, {'reach_value': mycount}}})
        else:
            newdict = {'id': a, 'usr_id': i.get('user_id'), 'reach_value': mycount, 'initfc': initfc}
            print newdict
            myid = reach.insert(newdict)

新的回溯是:

 File "get_reach.py", line 46, in <module>
    reach.update({'id': a}, {'$set': {{ 'initfc': initfc }, {'reach_value': mycount}}})
TypeError: unhashable type: 'dict'

您似乎回答了最初的問題只是偶然發現了另一個問題:

這不應該:

{'$set': {{ 'initfc': initfc }, {'reach_value': mycount}}}

是這樣的:

{'$set': { 'initfc': initfc , 'reach_value': mycount }}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM