【问题标题】:MongoEngine - Query - How to check if a ListField is empty or not setMongoEngine - 查询 - 如何检查 ListField 是否为空或未设置
【发布时间】:2012-08-08 15:27:37
【问题描述】:

如何检查 Mongo 类的 ListField() 属性是否未设置或为空?

谢谢!

【问题讨论】:

    标签: mongodb mongoengine listfield


    【解决方案1】:

    您好,您可以使用$exists$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())
    

    【讨论】:

    • 听起来不错!但它在最终查询中“存在”而不是“存在”,不是吗?我不允许用少于 6 个字符进行更改...
    【解决方案2】:

    如果您正在寻找相反的问题(检查列表是否至少包含一个元素,这意味着它也存在),以下是使用查询字典进行更改的方法:

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

    根据 MongoEngine documentationnot 运算符可用于否定标准检查,只要它位于查询运算符之前。

    【讨论】:

      【解决方案3】:

      不完全确定这是您所说的 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
      

      【讨论】:

        猜你喜欢
        • 2019-04-22
        • 1970-01-01
        • 1970-01-01
        • 2012-10-31
        • 1970-01-01
        • 1970-01-01
        • 2013-02-07
        • 1970-01-01
        相关资源
        最近更新 更多