#python-3.x #mongodb
#python-3.x #mongodb
Вопрос:
Я пытаюсь обновить документ в приведенной ниже коллекции MongoDB. Он не выдает ошибку и не обновляет документ.
Вот моя коллекция:
customer_docs = [
{
"customerName": "Yeshua Galisanao",
"msgId": "100",
"productDetails": [
{
"productName": "prod1",
"prodSerialNum": "sdgha53643657354"
},
{
"productName": "prod2",
"prodSerialNum": "fafruirykjnjhgukg"
}
],
"customer-address": [
{
"primaryAddress": [
{
"street": "#43 Easy Street",
"city": "Niceton",
"state": "PH",
"zip": "57733"
}
]
},
{
"secondaryAddress": [
{
"street": "23",
"city": "seattle"
}
]
}
]
},
{
"customerName": "Karl Mike",
"msgId": "101",
"productDetails": [
{
"productName": "prod10",
"prodSerialNum": "764hreopirrrhfnsf"
},
{
"productName": "prod11",
"prodSerialNum": "fsdfhsfybdfmdsgfyuu"
}
],
"customer-address": [
{
"primaryAddress": [
{
"street": "#66 Easy Street",
"zip": "57733"
}
]
}
]
}
]
Вот код python, который пытается обновить серийный номер для клиента «Karl Mike» до «newSerailNumber»:
client = pymongo.MongoClient("mongodb://127.0.0.1:27017")
db = client.MyDb
customer_col = db.customer
my_query1 = {"customerName": "Karl Mike"}
for customer in customer_col.find(my_query1):
for prod in customer["productDetails"]:
if prod["productName"] == "prod1" and prod["prodSerialNum"] != "abcdefghijklmop":
my_query2 = {
"customer": "Karl Mike",
"productDetails.productName": "prod1"
}
customer_col.update_one(my_query2, {"$set": {"productDetails.0.prodSerialNum": "newSerailNumber"}})
print("oops reached")
Но обновление документа здесь не происходит. Что я делаю не так? Почему сбой обновления документа не выдает никакой ошибки?
Ответ №1:
Это моя ошибка! Прежде всего, в моем коде есть опечатка. Вместо использования "customerName"
in my_query2
я использовал "customer"
as key .
Приведенный ниже код просто отлично работает:
my_query1 = {"customerName": message["customer_name"]}
for customer in customer_col.find(my_query1):
for prod in customer["productDetails"]:
if message["prod"] == prod["productName"] and message["serial_number"] != prod["prodSerialNum"]:
my_query2 = {
"customerName": "Karl Mike",
"productDetails.productName": "prod1",
"productDetails.prodSerialNum": prod["prodSerialNum"]
}
customer_col.update_many(my_query2, {"$set": {"productDetails.$.prodSerialNum": "newSerailNumber"}})
print("oops reached")
Но все еще интересно — почему для того же не было выдано ошибки.