MongoEngine — Запрос — Как проверить, является ли ListField пустым или не установленным

как проверить, не установлен ли атрибут ListField() класса Mongo или он пуст?

Спасибо!


person Ron    schedule 08.08.2012    source источник


Ответы (3)


Привет, вы можете использовать $ существует и $размер:

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())
person Ross    schedule 13.08.2012
comment
звучит отлично! но он существует и не существует в конечном запросе, не так ли? Мне не разрешено вносить изменения менее чем в 6 символов... - person Ron; 14.08.2012

Если вы искали обратный вопрос (проверьте, содержит ли список хотя бы элемент, который подразумевает, что он также существует), вот как вы можете сделать это, используя словарь запроса для изменения:

query = {}
query['tags__exists'] = True
query['tags__not__size'] = 0
for post in Post.objects(**query):
    print(post)

Согласно документации MongoEngine, оператор not можно использовать для отрицания стандартная проверка, если она предшествует оператору запроса.

person Voicu    schedule 07.10.2019

Не совсем уверен, что это то, что вы подразумеваете под пустым или не установленным ListField:

from mongoengine import *

connect('tumblelog')


class Post(Document):
    title = StringField(required=True)
    tags = ListField(StringField())


post1 = Post(title='Fun with MongoEngine', tags=['mongodb', 'mongoengine'])
post1.save()

for post in Post.objects:
    print post.title
    if not post.tags:
        print '-post has no tags'
    else:
        print post.tags

Это выведет:

Fun with MongoEngine
[u'mongodb', u'mongoengine']
Fun with MongoEngine no tags
-post has no tags
person Gianfranco P.    schedule 13.08.2012