Home > Net >  Delete document in mongoldb aggregation
Delete document in mongoldb aggregation

Time:11-20

I use this code to unset field when it becomes empty after $pull operation.

{'id': user_id},
[
    {
        '$set': {
            'badges': {
                '$filter': {
                    'input': '$badges',
                    'cond': {'$ne': ['$$this', badge_id]}
                 }
            }
        }
    },
    {
        '$set': {
            'badges': {
                '$cond': [
                    {
                        '$or': [
                            {'$eq': ['$badges', []]},
                            {'$eq': ['$badges', None]}
                        ]
                    },
                    '$$REMOVE',
                    '$badges'
                ]
            }
        }
    }
]

How to do something like it, but delete document instead of field?

CodePudding user response:

You can add after the first $set the bellow $match without the second $set.

The document that has badges = [] or null or missing(no badges field) will be deleted.

aggregate([
your_first_$set
{"$match": 
  {"$expr": 
    {"$not": 
     [{"$or": 
       [{"$eq": ["$badges", []]},
        {"$eq": ["$badges", null]},
        {"$eq": [{"$type": "$badges"}, "missing"]}]}]}}}
])
  • Related