python - 试图通过 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 循环。我怎么做?
解决方案
嘿,您提供的代码,它们在条件之上的相同数据上是不必要的第二个循环if
。
你应该删除那条线。作为公关更新数据,我使用和工作的代码如下:
collection.update({'_id':int(n)},{'$set' : {'CloseDate':TodayDate,'Status':'close'}})
在此提供的位置_id
和字段CloseDate
&Status
正在更新,这是有效的,因此您应该将要在 DB 中更新的新值放入一些变量中,并直接将它们分配到您的文档名称中。
希望这可以帮助。
推荐阅读
- python - 如何从远程文件创建图形?
- python-3.x - matplotlib.cm.coolwarm(用于 Google 的 Colaboratory TensorFlow 教程)是 Eclipse 中的未定义变量
- python - 如何根据另一列中的值是否包含在另一个数据框的特定列中来设置一个数据框的列值
- python - python将classB中的方法作为参数传递给classA,然后从传递的classB方法中调用classA中的方法
- laravel - laravel 5.4 HTTP ERROR 500 无法处理此请求
- keras - ONNX 到 Keras 的转换
- flutter - 在键盘事件上禁用小部件移动
- html - 如何使 5 行引导网格占据整个窗口?
- react-native - 如何在来自映射函数的组件之间添加空间?
- amazon-web-services - 将 API Gateway websocket 直接映射到无服务器中的 kinesis 流