2012-08-08 9 views

Antwort

11

Hallo Sie können $exists verwenden und $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()) 
+0

hört sich gut an! aber es "existiert" und nicht "existiert" in der endgültigen Abfrage, nicht wahr? Ich darf keinen Wechsel mit weniger als 6 Zeichen machen ... – Ron

-1

Nicht sicher ganz sicher, ob das, was Sie von leer oder nicht Listfield gesetzt bedeuten, ist dies:

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 

erhalten Sie folgende Ausgabe:

Fun with MongoEngine 
[u'mongodb', u'mongoengine'] 
Fun with MongoEngine no tags 
-post has no tags