【问题标题】:Pymongo:iterating dictionary of a list of dictionaryPymongo:迭代字典列表的字典
【发布时间】:2018-07-05 13:40:58
【问题描述】:

假设我有一个很大的集合,包括以下文档:

{"_id": 0, 
"name":"John Doe",
"items": [
     {"x":5,
      "y":8,
      "z":9},
     {"x":4,
      "y":2,
      "z":1},
     {"x":3,
      "y":5,
      "z":8}
]
}

我正在使用 pymongo 将集合提取到一个名为“数据”的变量中,并尝试迭代这些项目以更新一些项目。我尝试使用以下代码打印这些值:

for i in data:
    for j in data[i].get("items"):
        pprint(j.get("x"))

它给出了一个错误:

pymongo.errors.InvalidOperation: cannot set options after executing query

即使我得到了这些项目,我也看不到更改数据的方法。为什么会发生这种情况?如何遍历项目并更改它们的值?

【问题讨论】:

  • 我不太清楚您所说的“更改数据的方法”是什么意思。请举例说明您需要修改前后的文件。您的循环也看起来错误:for i in data: for j in data[i]...data 是什么?如何获得?

标签: python mongodb pymongo


【解决方案1】:

db 查询看起来如何?

尝试这样的迭代:

cursor = db.get_collection('some_collection').find()

for doc in cursor:
    for item in doc['items']:
        pprint(item.get('x'))

【讨论】:

    【解决方案2】:

    假设您要更改所有x 的值。

    for i in data.get('items'):
        # to change the values in items
        # this will replace all values of key x
        i['x'] = new_value
    

    只需为 items 键分配一个新值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 2015-03-06
      • 2013-07-01
      • 1970-01-01
      • 2012-04-01
      相关资源
      最近更新 更多