2016-02-10 113 views
0

我是一名Stackoverflow,MongoDB和PyMongo的新手。我有一個名爲posts的集合的數據庫,如下所示。Pymongo遍歷文檔列表

{ 
    EXPERIMENT:1, 
    DATA[ 
     {TIMESTAMP:1/1/1000 00:00:00, 
     "A":1, 
     "B":2, 
     "C":3 
     }, 
     {TIMESTAMP:1/1/1000 00:00:01, 
     "A":4, 
     "B":5, 
     "C":6 
     } 
    ] 
} 

我甚至不知道這是否是對數據結構的模型的最佳方式,但它是我現在所擁有的,我想查詢。當我嘗試查詢,

db.posts.find({EXPERIMENT:1},{DATA.TIMESTAMP:1, _id:0}) 

我得到了我想要的東西,但是,我得到「DATA」回來我認爲這是一個文件列表,但我不能遍歷它。

for result in db.posts.find({EXPERIMENT:1},{DATA.TIMESTAMP:1, _id:0}): 
    print result; 

這只是打印一個龐大的東西,而不是逐行通過DATA。我也試過:

for result in db.posts.find({EXPERIMENT:1},{DATA.TIMESTAMP:1, _id:0}): 
    for value in result: 
     print value; 

然後我再次得到結果數據,而不是我可以迭代的東西。顯然,我錯過了一些基本的東西。有人可以請指點我正確的方向嗎?也許是一個小題目,但你也有書的建議,可能會涵蓋這一點?

謝謝!

編輯: 最後,我想結果集,看起來像:

DATA = [1/1/1000 00:00:00, 1/1/1000 00:00:01] 

其中Data是一家傳統的Python列表,這樣我可以這樣做:

for value in DATA: 
    print value; 
    # Do something else with data 

同樣,我知道我錯過了一些非常基本的東西。感謝您的幫助和理解!

回答

0

它打印一個這樣的「大東西」?

In [12]: for result in db.test.find({'EXPERIMENT':1}, {'DATA.TIMESTAMP':1, '_id':0}): print result 
{u'DATA': [{u'TIMESTAMP': u'1/1/1000 00:00:00'}, {u'TIMESTAMP': u'1/1/1000 00:00:01'}]} 

然後,你應該嘗試pprint:

In [13]: from pprint import pprint 

In [14]: for result in db.test.find({'EXPERIMENT':1}, {'DATA.TIMESTAMP':1, '_id':0}): pprint(result) 
{u'DATA': [{u'TIMESTAMP': u'1/1/1000 00:00:00'}, 
      {u'TIMESTAMP': u'1/1/1000 00:00:01'}]} 

你也可以這樣做:

In [15]: for result in db.test.find({'EXPERIMENT':1}, {'DATA.TIMESTAMP':1, '_id':0}): 
    ....:  for k, v in result.items(): 
    ....:   print k, v 
    ....:   
DATA [{u'TIMESTAMP': u'1/1/1000 00:00:00'}, {u'TIMESTAMP': u'1/1/1000 00:00:01'}] 
+0

嗨@ Oz124,感謝您的快速反應!對不起,我覺得我沒有正確地問這個問題(我會編輯問題)。這仍然給我列表中的所有數據(timestamp key:timestamp value),我似乎無法遍歷。在postgres和psycopg中,如果我遍歷一個遊標,我會得到我可以處理的值。 –

+0

Pymongo不返回「值」它返回字典的生成器。每個字典都可以用我向你展示的模式迭代。 – Oz123

+0

詞典!這是我正在尋找的詞,你是完全正確的。謝謝。 –