Guillermo Brachetta
Guillermo Brachetta

Reputation: 4775

Update or edit a subarray in a MongoDB document

I am currently using this to push a 'review' to my array of reviews in my perfumes collection:

    mongo.db.perfumes.update(
        {"_id": perfume["_id"]},
        {
            "$push": {
                "reviews": {
                    "_id": review_id,
                    "review_content": form.review.data,
                    "reviewer": current_user.username,
                    "date_reviewed": datetime.utcnow(),
                    "reviewer_picture": current_user.avatar,
                }
            }
        },
    )

So as a result my document is:

[
    {
        "_id": {
            "$oid": "5ebf29dd1f3fe19434e41761"
        },
        "author": "Guillermo",
        "brand": "A test brand",
        "name": "A test perfume",
        "perfume_type": "Woody",
        "description": "<p>A test description</p>",
        "date_updated": {
            "$date": "2020-05-15T23:46:37.242Z"
        },
        "public": false,
        "picture": "generic.png",
        "reviews": [
            {
                "_id": {
                    "$oid": "5ebf29e90000000000000000"
                },
                "review_content": "<p>A test review</p>",
                "reviewer": "Guillermo",
                "date_reviewed": {
                    "$date": "2020-05-15T23:46:49.308Z"
                },
                "reviewer_picture": "a92de23ae01cdfde.jpg"
            }
        ]
    }
]

I want to create another route to update or edit the contents of my review (review_content). What's the way to update that subarray in my collection?

Thank you!!

Upvotes: 0

Views: 53

Answers (1)

Puneet Singh
Puneet Singh

Reputation: 3543

Let's assume you want to update review_content of a particular review you will use below query

mongo.db.perfumes.update(
    {"_id": perfume["_id"], "reviews._id": review["_id"]},
    { $set: { "reviews.$.review_content" : "This is my new content"} },
)

Upvotes: 1

Related Questions