пытаюсь обновить мою коллекцию MongoDB через Python (PyMongo), но моя логика неверна - PullRequest
0 голосов
/ 07 сентября 2018

Я новичок в программировании и изучаю Flask около недели, пытаясь создать сайт для электронной коммерции.

У меня есть коллекция под названием users, в которой каждая запись выглядит следующим образом

{
    "_id" : ObjectId("5b9170f1c5eb754e3ab8917f"),
    "username" : "suhas",
    "password" : "suhas",
    "email" : "suhas",
    "account_type" : "buyer",
    "cart" : [
        {
            "product_id" : "5b915dd3c5eb754278e160e7",
            "quantity" : 7
        },
        {
            "product_id" : "5b915e3fc5eb754278e160e8",
            "quantity" : 3
        }
    ]
}

и коллекция users.products, один из элементов выглядит следующим образом

{

    "_id" : ObjectId("5b915f02c5eb7544108a14b9"),
    "product name" : "Laptop",
    "price" : 50000,
    "description" : "HP laptop",
    "user_id" : "5b914fc3c5eb753eaf81770c",
    "username" : "chiranth"
}

Я хотел добавить функцию «добавить в корзину», которая добавляет product_id и количество в корзину (список типов) в виде словарей, как видно из коллекции db.users.

Код на Python, который я написал как:

cart_dict = user_info.get("cart")    


    for dict1 in cart_dict:
        if dict1["product_id"]==product_id:
            db["users"].update({"_id" : ObjectId(user_id),"cart.product_id":product_id},{ '$inc':{ 'cart.$.quantity':quantity}})
            break
        else:
            db["users"].update({"_id":ObjectId(user_id)},{"$addToSet":{"cart":{"$each":[{"product_id":product_id,"quantity":quantity}]}}})

Проблема, однако, в том, что если я увеличиваю второй продукт, добавляя еще 2 к корзине, добавляя к текущим 3, условие if проверяет первый продукт, видит, что идентификатор продукта не совпадает, и просто добавляет это как новый продукт, а затем переходит к продукту 2.

Таким образом, мой вопрос будет таким: как я могу попросить условие if проверить сначала все product_id И ТО, а затем, если они не совпадают, добавить продукт?

РЕДАКТИРОВАТЬ: уточнить, моя проблема с условием ЕСЛИ. Я хочу сначала сравнить продукт A, если он не удовлетворен, перейти к продукту B, и если ни один из них не совпадает, то он должен перейти к циклу else. Как я могу это сделать?

1 Ответ

0 голосов
/ 07 сентября 2018

Привет, код, который вы предоставили, это ненужная секунда для цикла на тех же данных чуть выше условия if.

Вы должны удалить эту строку. При обновлении данных код, который я использовал и работает, выглядит так:

collection.update({'_id':int(n)},{'$set' : {'CloseDate':TodayDate,'Status':'close'}})

в этом месте where предоставляется в _id, а поля CloseDate & Status обновляются, это работает, поэтому вы должны поместить новые значения, которые должны быть обновлены в БД, в некоторые переменные и напрямую назначить их в названии ваших документов.

Надеюсь, это поможет.

...