【问题标题】:How to query a field in an ListField of EmbeddedModelField in django-nonrel?如何在 django-nonrel 中查询 EmbeddedModelField 的 ListField 中的字段?
【发布时间】:2013-09-11 05:24:38
【问题描述】:

假设我有这个:

class Parent(models.Model):
    id = models.IntegerField(primary_key=True)
    children = ListField(EmbeddedModelField('Child'))

class Child(models.Model):
    id = models.IntegerField(primary_key=True)

在 mongo 交互式 shell 中,查找具有特定子项的父项非常简单:

db.myapp_parent.find({'children.id': 123})

这是如何在 django-nonrel 中完成的?

我尝试了一些方法,包括查找原始查询,但由于某种原因 raw_results 不是 Parent.objects 中的方法。

FWIW,这就是我在 requirements.txt 中的内容:

git+https://github.com/django-nonrel/django@nonrel-1.3
git+https://github.com/django-nonrel/djangotoolbox@toolbox-1.3
git+https://github.com/django-nonrel/mongodb-engine@mongodb-engine-1.3

【问题讨论】:

    标签: django mongodb pymongo django-orm django-nonrel


    【解决方案1】:

    环顾四周,突然以下mentioned there 对我来说就像魔术一样,这似乎避免了对原始查询的需要(适应您的示例):

    from django_mongodb_engine.query import A
    
    ...
    
    Parent.objects.filter( children = A('id', '123') )
    

    关于要求:

    git+https://github.com/django-nonrel/django@nonrel-1.5
    git+https://github.com/django-nonrel/djangotoolbox@toolbox-1.8
    git+https://github.com/django-nonrel/mongodb-engine
    #(django-mongodb-engine==0.6.0)
    #(pymongo==3.2)
    

    【讨论】:

      【解决方案2】:

      我想我自己找到了答案:

      https://groups.google.com/forum/#!topic/django-non-relational/kCLOcI7nHS0

      基本上,似乎还不支持。

      所以解决方法是原始查询。

      为了进行原始查询,问题中的代码应修改为:

      from django_mongodb_engine.contrib import MongoDBManager
      
      
      class Parent(models.Model):
          id = models.IntegerField(primary_key=True)
          children = ListField(EmbeddedModelField('Child'))
      
          objects = MongoDBManager()
      
      
      class Child(models.Model):
          id = models.IntegerField(primary_key=True)
      

      然后

      Parent.objects.raw_query({'children.id': 123})
      

      有效。

      【讨论】:

        猜你喜欢
        • 2011-07-24
        • 2011-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-19
        • 2015-04-06
        • 2012-12-10
        相关资源
        最近更新 更多