假设我有这个:
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中,使用特定子项查找Parent是如此简单:
db.myapp_parent.find({'children.id': 123})
这是如何在django-nonrel中完成的?
我尝试了一些方法,包括我查找了原始查询,但由于某种原因,raw_results不是Parent.objects中的方法。
FWIW,这就是我的需求.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
答案 0 :(得分:5)
我想我自己找到了答案:
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})
作品。
答案 1 :(得分: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)