【问题标题】:Pymongo iterate through list of docsPymongo 遍历文档列表
【发布时间】:2016-05-21 07:42:58
【问题描述】:

我是 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

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

【问题讨论】:

    标签: python arrays mongodb iteration pymongo


    【解决方案1】:

    它会像这样打印一件“大事”吗?

    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'}]
    

    【讨论】:

    • 嗨@Oz124,感谢您的快速回复!抱歉,我觉得我没有正确提出问题(我将编辑问题)。这仍然为我提供了列表中似乎无法遍历的所有数据(时间戳键:时间戳值)。在 postgres 和 psycopg 中,如果我遍历游标,我会得到可以处理的值。
    • Pymongo 不返回“值”,它返回一个字典生成器。每个字典都可以使用我向您展示的模式进行迭代。
    • 字典!那是我要找的词,你是绝对正确的。谢谢。
    猜你喜欢
    • 2017-04-15
    • 2018-09-09
    • 2018-02-19
    • 2014-10-23
    • 2016-02-26
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多