Неразрушимый тип Python 'dict' в многоуровневом массиве json - PullRequest
0 голосов
/ 23 сентября 2019

Я хочу обновить свою базу данных в MongoDB, но у меня есть проблема с моим кодом, выдающим ошибку

Ошибка типа: unhashable Тип: 'dict'

Я даю tuple () внутри словаря для исправления TypeError: unhashable type: 'list'

Я попытался найти решение в Интернете и через stackoverflow, но никто из них не мог мне помочь, кто-нибудь может дать мне решение с простым объяснением?

@app.route('/updateData', methods=['POST'])
def updateData():
    dataList = mongo.db.warehouse
    old_Data = {
        "name": "Pulo Gebang Warehouse"
    }
    new_Data =  {
                    "$set": {
                        "racks.$[i].rack_columns.$[k].rack_objects.$[j].items": 
                            tuple([
                                {
                                    "index": 4,
                                    "item": {
                                    "SKU": "HD 2179/3",
                                    "arrivalDate": "2019-10-22",
                                    "brand": "Philips",
                                    "maxQty": 30,
                                    "name": "Playstatus 10",
                                    "qty": 10
                                    }
                                }
                            ])

                    }
                }
    arrayFilter = {
        tuple([
            {
            "i.code": "A"
            },
            {
            "k.ObjectID": 0
            },
            {
            "j.index": 4
            }
        ])
    }
    dataList.update(old_Data, new_Data, arrayFilter, upsert=True)
    return "Update Success!"

1 Ответ

0 голосов
/ 23 сентября 2019

Я видел эту ошибку раньше, когда случайно создал набор букв с {}.Посмотрите, работает ли это:

  arrayFilters = [ # no curly braces so Python doesn't think you're creating a set
            {
            "i.code": "A"
            },
            {
            "k.ObjectID": 0
            },
            {
            "j.index": 4
            }
   ])
   # double check the signature of update as well
   dataList.update(old_Data, new_Data, arrayFilters=arrayFilters, upsert=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...