2016-02-10 112 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

词典!这是我正在寻找的词,你是完全正确的。谢谢。 –