Pymongo遍历文档列表

时间:2016-02-10 19:14:02

标签: python arrays mongodb iteration pymongo

我是Stackoverflow,MongoDB和PyMongo的完全新手。我有一个数据库,其中包含一个名为posts的集合,如下所示。

{
    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,而不是我可以迭代的东西。显然,我错过了一些基本的东西。有人可以指点我正确的方向吗?也许有点偏离主题,但你是否也有可能涵盖这个的书籍建议?

谢谢!

编辑: 最终,我想要一个看起来像的结果集:

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

同样,我知道我错过了一些非常基本的东西。感谢您的帮助和理解!

1 个答案:

答案 0 :(得分: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'}]