как проверить, не установлен ли атрибут ListField()
класса Mongo или он пуст?
Спасибо!
как проверить, не установлен ли атрибут ListField()
класса Mongo или он пуст?
Спасибо!
Привет, вы можете использовать $ существует и $размер:
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())
Если вы искали обратный вопрос (проверьте, содержит ли список хотя бы элемент, который подразумевает, что он также существует), вот как вы можете сделать это, используя словарь запроса для изменения:
query = {}
query['tags__exists'] = True
query['tags__not__size'] = 0
for post in Post.objects(**query):
print(post)
Согласно документации MongoEngine, оператор not
можно использовать для отрицания стандартная проверка, если она предшествует оператору запроса.
Не совсем уверен, что это то, что вы подразумеваете под пустым или не установленным 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