首页 > 解决方案 > 试图通过 Python (PyMongo) 更新我的 MongoDB 集合,但我的逻辑是错误的

问题描述

我是编程新手,我已经学习 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条件会检查第一个产品,发现产品 ID 不匹配并将其添加为新产品和然后转到产品 2。

所以我的问题是:我如何要求if条件首先检查所有product_id,然后,如果没有匹配,添加产品?

编辑:澄清一下,我的问题是 IF 条件。我希望它首先比较产品 A,如果不满足,则移至产品 B,如果两者都不匹配,则应该转到 else 循环。我怎么做?

标签: pythonmongodbfor-loopif-statementpymongo

解决方案


嘿,您提供的代码,它们在条件之上的相同数据上是不必要的第二个循环if

你应该删除那条线。作为公关更新数据,我使用和工作的代码如下:

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

在此提供的位置_id和字段CloseDate&Status正在更新,这是有效的,因此您应该将要在 DB 中更新的新值放入一些变量中,并直接将它们分配到您的文档名称中。

希望这可以帮助。


推荐阅读