$ addtoset运算符未按预期运行

时间:2018-10-24 06:46:30

标签: mongodb mongoose mongodb-query pymongo pymongo-3.x

我正在使用以下架构,并使用 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数组的理想方法是什么?

一些解释也将真正有帮助……

0 个答案:

没有答案