1

假设我有这个:

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
4

2 回答 2

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})

作品。

于 2013-09-08T19:51:28.400 回答
1

环顾了一会,突然间提到的以下内容对我来说就像魔术一样,这似乎避免了对原始查询的需要(适用于您的示例):

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)
于 2016-02-25T10:47:01.803 回答