我正在使用以下架构,并使用 pymongo 进行开发。我正在尝试使用$ addtoSet将新的json添加到产品数组中,以避免重复。我找不到解释此用例的适当文章。准确地说,如何将$ addtoset用于json数组作为子文档?
{
"_id": 1,
"product_prefix": "vendor",
"inventory": {
"_id": 1,
"products": [
{
"product_id": "vendor2",
"item_name": "itemname2",
"item_description": "item_description2",
"price": 200,
"available_units": 230,
"available": 1
},
{
"product_id": "vendor3",
"item_name": "item 01",
"item_description": "test item",
"price": 200,
"available_units": 1,
"available": 1
},
{
"product_id": "vendor4",
"item_name": "item 01",
"item_description": "test item",
"price": 200,
"available_units": 1,
"available": 1
},
{
"product_id": "vendor8",
"item_name": "item 01",
"item_description": "test item",
"price": 200,
"available_units": 1,
"available": 1
}
]
}
}
下面提到的更新调用实际上添加了另一个json行
c.update_one(
{'_id' : 1},
{'$addToSet' : {"inventory.products" : {'product_id': 'vendor8', 'item_name': 'item 01', 'item_description': '
test item', 'price': 5500, 'available_units': 1, 'available': 1} } })
在执行此命令后,以下是数据库中的结果,尽管子文档中的product_id字段是唯一键,但仍将数据添加到子文档中。
{
"product_id": "vendor8",
"item_name": "item 01",
"item_description": "test item",
"price": 200,
"available_units": 1,
"available": 1
},
{
"product_id": "vendor8",
"item_name": "item 01",
"item_description": "test item",
"price": 5500,
"available_units": 1,
"available": 1
}
由于最近添加的行已经存在,因此在这种情况下$ addtoSet可以按预期工作。我尝试使用$ addToSet的方式是错误的?。在这种情况下,更新嵌入式文档中json数组的理想方法是什么?
一些解释也将真正有帮助……