2016-08-24 61 views
1

爲什麼光標不會迭代?我覺得應該是是一個簡單的解決方案。從MLab中迭代一個pymongo光標

我試圖多個堆棧溢出的答案和MongoDB的文檔 https://docs.mongodb.com/getting-started/python/query/

的代碼是按如下:

from pymongo import MongoClient 

#Connect to Mongo Client 
client = MongoClient('mongodb://the_username:[email protected]:47124/politicians_from_theage') 
db = client.politicians_from_theage #define database used 

# Define Collection 
collection = db.posts 
print collection 

結果:

Collection(Database(MongoClient(host=['ds047124.mlab.com:47124'], document_class=dict, tz_aware=False, connect=True), u'politicians_from_theage'), u'posts') 

然後將光標將打印其位置:

# Define Cursor 
my_cursor = collection.find() 
print my_cursor 

結果:

<pymongo.cursor.Cursor object at 0x0000000003247518> 

然後嘗試和迭代光標提供超時:

# Perform query 
    cursor = db.posts.find() 
    #Iterate the cursor and print the documents. 
for document in cursor: 
    print(document) #No Luck 

回溯錯誤或迭代:

Traceback (most recent call last): 
    File "C:\PythonC\PythonWebScraping\17_MongoInterface\mongoget.py", line 18, in <module> 
    for result_object in my_cursor: 
    File "C:\Python27\lib\site-packages\pymongo\cursor.py", line 1090, in next 
    if len(self.__data) or self._refresh(): 
    File "C:\Python27\lib\site-packages\pymongo\cursor.py", line 1012, in _refresh 
    self.__read_concern)) 
    File "C:\Python27\lib\site-packages\pymongo\cursor.py", line 850, in __send_message 
    **kwargs) 
    File "C:\Python27\lib\site-packages\pymongo\mongo_client.py", line 827, in _send_message_with_response 
    server = topology.select_server(selector) 
    File "C:\Python27\lib\site-packages\pymongo\topology.py", line 210, in select_server 
    address)) 
    File "C:\Python27\lib\site-packages\pymongo\topology.py", line 186, in select_servers 
    self._error_message(selector)) 
pymongo.errors.ServerSelectionTimeoutError: ds047124.mlab.com:47124: timed out 

我嘗試了'遊標','my_cursor'和'集合'的迭代,每個都提供服務器超時的追蹤錯誤。 任何幫助/洞察力將不勝感激

回答

1

這可能會幫助你: -

# Perform query 
cursor = db.posts.find().toAray(function(err, result){ 
    #Iterate the cursor and print the documents. 
    for document in result: 
    print(document); 
}) //Will give you array of objects. 

讓我知道,如果它的工作原理。

0

找到了答案,我關注的是遊標,而不是將光標中的對象從JSON加載到JSON列表。

最終代碼如下(除去URI)

import json 
from datetime import date, timedelta 
from pymongo import MongoClient 
from bson import json_util 

#Connect to Mongo Client 
client = MongoClient('mongodb://user:[email protected]:47124/politicians_from_theage') 
db = client.politicians_from_theage #define database used 
print db 
# Define Collection 
collection = db.posts 
print collection # print Collection(Database(MongoClient(host=['ds047124.mlab.com:47124']... 


cursor = collection.find() 
print cursor 

# Obtain json 
json_docs = [] 
for doc in cursor: 
    json_doc = json.dumps(doc, default=json_util.default) 
    json_docs.append(json_doc) 
print json_docs #json result 

# List Comprehension version 
#json_docs = [json.dumps(doc, default=json_util.default) for doc in cursor] 

#To get back from json again as string list 
docs = [json.loads(j_doc, object_hook=json_util.object_hook) for j_doc in json_docs] 
print docs 

print 'kitty terminates program'