Pymongo: повторяющийся словарь из списка - PullRequest
0 голосов
/ 04 июля 2018

Допустим, у меня есть большая коллекция, включая такие документы:

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

Я извлекаю коллекцию в переменную с именем «data» с помощью 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

Даже если я получу предметы, я не вижу способа изменить данные. Почему это происходит и как я могу перебирать элементы и изменять их значения?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Допустим, если вы хотите изменить значения всех 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.

0 голосов
/ 04 июля 2018

Как выглядит БД запроса?

Попробуйте что-то подобное для итерации:

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

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