Search code examples
mongodbmongoenginelistfield

MongoEngine - Query - How to check if a ListField is empty or not set


how do I check if an ListField() attribute of a Mongo Class is not set or empty?

Thanks!


Solution

  • Hi you can use $exists and $size:

    import unittest
    from mongoengine import *
    
    class Test(unittest.TestCase):
    
        def setUp(self):
            conn = connect(db='mongoenginetest')
    
        def test_list_exists_or_has_size(self):
    
            class Post(Document):
                title = StringField(required=True)
                tags = ListField(StringField())
    
            Post.drop_collection()
    
            Post(title="Hello Stackoverflow").save()
            Post(title="Hello twitter", tags=[]).save()
            Post(title="Hello world", tags=['post', 'blog']).save()
    
            self.assertEqual(2, Post.objects(
                                    Q(tags__exists=False) |
                                    Q(tags__size=0)).count())