MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB - Cập nhật trường trong một đối tượng mảng dựa trên giá trị trường của mảng lồng nhau

Vui lòng thử cái này:

db.Product.findOneAndUpdate(
        { _id: 123 },
        {
            $set: {
                'variations.$[item].valueList.$[nameField].value': 'newRed',
                'variations.$[item].picture': 'newURL' // item is each object in variations which is being checked in arrayFilters.
            }
        },
        {
            arrayFilters: [{ 'item.valueList.value': 'oldRed' }, { 'nameField.value': 'oldRed' }],
            new: true
        }
   )

Dữ liệu bộ sưu tập:

{
    "_id" : 123,
    "variations" : [ 
        {
            "id" : 1,
            "picture" : "https://example.picture.com",
            "valueList" : [ 
                {
                    "name" : "color",
                    "value" : "oldRed"
                }, 
                {
                    "name" : "size",
                    "value" : "M"
                }, 
                {
                    "name" : "color",
                    "value" : "oldRed"
                }
            ]
        }, 
        {
            "id" : 2,
            "picture" : "https://example.picture.com",
            "valueList" : [ 
                {
                    "name" : "color",
                    "value" : "black"
                }, 
                {
                    "name" : "size",
                    "value" : "M"
                }
            ]
        }, 
        {
            "id" : 3,
            "picture" : "https://example3.picture.com",
            "valueList" : [ 
                {
                    "name" : "color",
                    "value" : "oldRed"
                }, 
                {
                    "name" : "size",
                    "value" : "M"
                }
            ]
        }
    ]
}

Kết quả:

/* 1 */
{
    "_id" : 123,
    "variations" : [ 
        {
            "id" : 1,
            "picture" : "newURL",
            "valueList" : [ 
                {
                    "name" : "color",
                    "value" : "newRed"
                }, 
                {
                    "name" : "size",
                    "value" : "M"
                }, 
                {
                    "name" : "color",
                    "value" : "newRed"
                }
            ]
        }, 
        {
            "id" : 2,
            "picture" : "https://example.picture.com",
            "valueList" : [ 
                {
                    "name" : "color",
                    "value" : "black"
                }, 
                {
                    "name" : "size",
                    "value" : "M"
                }
            ]
        }, 
        {
            "id" : 3,
            "picture" : "newURL",
            "valueList" : [ 
                {
                    "name" : "color",
                    "value" : "newRed"
                }, 
                {
                    "name" : "size",
                    "value" : "M"
                }
            ]
        }
    ]
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tại sao bạn vẫn nên sử dụng Công cụ lưu trữ MMAPv1 cho MongoDB

  2. Tên trường batchSize bị bỏ qua trong Phép chiếu trường

  3. Mongodb trong máy chủ linux

  4. Làm thế nào để vô hiệu hóa mongodb được nhúng vào flapdoodle trong một số thử nghiệm nhất định

  5. Draft.js - Không thể lấy dữ liệu từ cơ sở dữ liệu. Lỗi nguồn gốc chéo