sql >> Databáze >  >> NoSQL >> MongoDB

Jak aktualizovat vložený dokument do vnořeného pole?

Podle popisu vašeho problému zde:

For example I want to change the quantity of the item 10 in Invoice 123456789. Právě jsem změnil Quantity až 3. Zde můžete provádět libovolné operace, jak chcete. Jen si musíte povšimnout, jak jsem použil arrayFilters tady.

Zkuste tento dotaz:

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

Výše uvedený dotaz byl úspěšně proveden z mongo shell (Mongo 3.6.3). A vidím tento výsledek:

/* 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
            }
        ]
    }
 ]
}

To jsi chtěl?




  1. Sdružování připojení ve Spring Boot a mongo db

  2. Redis vs. MongoDB:Porovnání databází v paměti s Percona Memory Engine

  3. Jaké jsou dobré způsoby, jak získat aktuální uživatelské detaily v modelech?

  4. MongoDB BasicDBObject vs Document v jazyce Java