【发布时间】:2012-08-08 15:27:37
【问题描述】:
如何检查 Mongo 类的 ListField() 属性是否未设置或为空?
谢谢!
【问题讨论】:
标签: mongodb mongoengine listfield
如何检查 Mongo 类的 ListField() 属性是否未设置或为空?
谢谢!
【问题讨论】:
标签: mongodb mongoengine listfield
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 documentation,not 运算符可用于否定标准检查,只要它位于查询运算符之前。
【讨论】:
不完全确定这是您所说的 empty 还是 not set ListField this:
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
【讨论】: