MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como atualizar um documento incorporado em uma matriz aninhada?


De acordo com a descrição do seu problema aqui:

For example I want to change the quantity of the item 10 in Invoice 123456789. Acabei de alterar a Quantity a 3. Você pode realizar aqui quaisquer operações que desejar. Você só precisa tomar nota de como eu usei arrayFilters aqui.

Tente esta consulta:
db.collection.update(
 {"_id" : "12345678"},
 {$set:{"Invoices.$[element1].Items.$[element2].Quantity":3}},
 {multi:true, arrayFilters:[ {"element1._id": "123456789"},{ 
  "element2.Item": { $eq: 10 }} ]}
)

A consulta acima foi executada com sucesso a partir do shell do mongo (Mongo 3.6.3). E vejo este resultado:
/* 1 */
{
"_id" : "12345678",
"Invoices" : [ 
    {
        "_id" : "123456789",
        "Currency" : "EUR",
        "DueTotalAmountInvoice" : 768.37,
        "InvoiceDate" : "2016-01-01 00:00:00.000",
        "Items" : [ 
            {
                "Item" : 10,
                "ProductCode" : "ABC567",
                "Quantity" : 3.0
            }, 
            {
                "Item" : 20,
                "ProductCode" : "CDE987",
                "Quantity" : 1
            }
        ]
    }, 
    {
        "_id" : "87654321",
        "Currency" : "EUR",
        "DueTotalAmountInvoice" : 768.37,
        "InvoiceDate" : "2016-01-01 00:00:00.000",
        "Items" : [ 
            {
                "Item" : 30,
                "ProductCode" : "PLO987",
                "Quantity" : 1,
                "Units" : "KM3"
            }, 
            {
                "Item" : 40,
                "ProductCode" : "PLS567",
                "Quantity" : 1,
                "DueTotalAmountInvoice" : 768.37
            }
        ]
    }
 ]
}



É isso que você queria?