【问题标题】:How to add grand children elements if it do not exist in mongodb?如果 mongodb 中不存在,如何添加大子元素?
【发布时间】:2020-06-11 10:43:13
【问题描述】:

我需要向大子元素添加新元素。例如,我需要为现有产品添加新仓库。在此示例中,所有 size.wares 都有 LAX,但是产品“aaaa”、尺寸“42”和产品“bbbb”、尺寸“45”中缺少“NYC”

所以我需要检查所有产品及其尺寸,如果商品“NYC”存在,则添加新商品“NYC”

[
{
"_id": ObjectId("5db72c636309f84479ec0c7b"),
"productCode": "aaaa",
"brand": "Nike",
"image": "some.jpg",
"sizes": [
    {
    "_id": ObjectId("5db72c636309f84479ec0c7e"),
    "size": "41",
    "wares": [
        {
        "_id": ObjectId("5db72c636309f84479ec0c80"),
        "ware": "LAX",
        "amount": 100
        },
        {
        "_id": ObjectId("5db72c636309f84479ec0c7f"),
        "ware": "NYC",
        "amount": 7
        }
    ]
    },
    {
    "_id": ObjectId("5db72c636309f84479ec0c7c"),
    "size": "42",
    "wares": [
        {
        "_id": ObjectId("5db72c636309f84479ec0c7d"),
        "ware": "LAX",
        "amount": 16
        }
    ]
    }
]
},
{
"_id": ObjectId("5db72c636309f84479ec0c7X"),
"productCode": "bbbb",
"brand": "Nike",
"image": "some.jpg",
"sizes": [
    {
    "_id": ObjectId("5db72c636309f84479ec0c7D"),
    "size": "41",
    "wares": [
        {
        "_id": ObjectId("5db72c636309f84479ec0c8G"),
        "ware": "LAX",
        "amount": 100
        },
        {
        "_id": ObjectId("5db72c636309f84479ec0c7R"),
        "ware": "NYC",
        "amount": 7
        }
    ]
    },
    {
    "_id": ObjectId("5db72c636309f84479ec0c7q"),
    "size": "45",
    "wares": [
        {
        "_id": ObjectId("5db72c636309f84479ec0c7n"),
        "ware": "LAX",
        "amount": 16
        }
    ]
    }
]
}]

例如产品“bbbb”尺寸“45”

{
    "_id": ObjectId("5db72c636309f84479ec0c7q"),
    "size": "45",
    "wares": [
        {
        "_id": ObjectId("5db72c636309f84479ec0c7n"),
        "ware": "LAX",
        "amount": 16
        }
    ]
    }

在“upsert”之后应该是这样的吗

{
    "_id": ObjectId("5db72c636309f84479ec0c7q"),
    "size": "45",
    "wares": [
        {
        "_id": ObjectId("5db72c636309f84479ec0c7n"),
        "ware": "LAX",
        "amount": 16
        },{
        "_id": ObjectId("5db72c636309f84479ec0c7x"),
        "ware": "NYC",
        "amount": 0
        }

    ]
    }

【问题讨论】:

    标签: arrays mongodb updates


    【解决方案1】:

    会是这个:

    db.collection.updateOne(
       { productCode: "bbbb" },
       {
          $push: {
             "sizes.$[item].wares": {
                _id: ObjectId("5db72c636309f84479ec0c7a"),
                ware: "NYC",
                amount: 0
             }
          }
       },
       { arrayFilters: [{ "item.size": "45" }] }
    )
    

    注意,为了避免重复,您可以使用$addToSet 而不是$push

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      相关资源
      最近更新 更多