Assume we have the following collection, which I have few questions about:

{
    "_id" : ObjectId("4faaba123412d654fe83hg876"),
    "user_id" : 123456,
    "total" : 100,
    "items" : [
            {
                    "item_name" : "my_item_one",
                    "price" : 20
            },
            {
                    "item_name" : "my_item_two",
                    "price" : 50
            },
            {
                    "item_name" : "my_item_three",
                    "price" : 30
            }
    ]
}
  1. I want to increase the price for “item_name”:”my_item_two” and if it doesn’t exists, it should be appended to the “items” array.

  2. How can I update two fields at the same time? For example, increase the price for “my_item_three” and at the same time increase the “total” (with the same value).

I prefer to do this on the MongoDB side, otherwise I have to load the document in client-side (Python) and construct the updated document and replace it with the existing one in MongoDB.

This is what I have tried and works fine if the object exists:

db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})

However, if the key doesn’t exist, it does nothing.
Also, it only updates the nested object. There is no way with this command to update the “total” field as well.

4 Answers
4

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *