Maverick Sachin
Maverick Sachin

Reputation: 883

upsert and arrayfilters in pymongo query error - TypeError: upsert must be True or False

I have PyMongo query - where I'm trying to increment value of a group label value of an array inside the document.

UpdateOne({
                "document": ObjectId(document_data),
                "result": {'$elemMatch': {
                    "class_label": {"$regex": label_regex},
                    "group_label": {'$gt': group_label_data}}}
                },
                {'$inc': {"result.$[element].group_label": -1}},
                {
                    'arrayFilters': [
                        {
                            "element.class_label": label_regex,
                            "element.group_label": {'$gt': group_label_data}
                        }
                    ],
                    'upsert': False
                }
                )

The error I'm getting for this -

TypeError: upsert must be True or False

Can you please help me out here? I'm new to MongoDB. Please let me know if more info is needed.

Thanks in advance!

Upvotes: 4

Views: 1660

Answers (1)

Belly Buster
Belly Buster

Reputation: 8844

Firstly I suspect you want the update_one() method rather than the UpdateOne bulk operator.

update_one() takes upsert and array_filters as parameters, so you need something like:

db.mycollection.update_one(
    {
        "document": ObjectId(document_data),
        "result": {'$elemMatch': {
            "class_label": {"$regex": label_regex},
            "group_label": {'$gt': group_label_data}}}
    },
    {'$inc': {"result.$[element].group_label": -1}},
    upsert=False,
    array_filters=[
        {
            "element.class_label": label_regex,
            "element.group_label": {'$gt': group_label_data}
        }
    ]
)

Upvotes: 6

Related Questions