4

自从四天以来,我试图弄清楚如何从一个类到另一个类的引用,从被引用的类开始。在 SQL-Django 中,有一个related_name可以实现这一点...

例如我有这个类:

class MyClass(Document):
    ...
    other_classes = ListField(ReferenceField(Other_Class))

和这个:

class Other_Class(Document):
    ...

现在我想去...Other_ClassMyClass什么想法吗?

谢谢,

罗恩

4

3 回答 3

3

这是一个显示如何查询它的测试用例:

import unittest
from mongoengine import *


class StackOverFlowTest(unittest.TestCase):

    def setUp(self):
        conn = connect(db='mongoenginetest')

    def test_one_two_many(self):

        class MyClass(Document):
            other_classes = ListField(ReferenceField("OtherClass"))

        class OtherClass(Document):
            text = StringField()

        MyClass.drop_collection()
        OtherClass.drop_collection()

        o1 = OtherClass(text='one').save()
        o2 = OtherClass(text='two').save()
        m = MyClass(other_classes=[o1, o2]).save()

        # Lookup MyClass that has o1 in its other_classes
        self.assertEqual(m, MyClass.objects.get(other_classes=o1))

        # Lookup MyClass where either o1 or o2 matches
        self.assertEqual(m, MyClass.objects.get(other_classes__in=[o1, o2]))

主要问题是您是否需要将参考列表存储在MyClass? OtherClass将关系存储在..上可能更有效

于 2012-08-03T09:35:36.597 回答
0

在思考我的问题时,我想出了一个解决方案。

我只是将我引用的类的 ID 添加到我的模型中。

这是一个例子:

class MyClass(Document):
    ...
    other_classes = ListField(ReferenceField(Other_Class))

class Other_Class(Document):
    myclass = ReferenceField(MyClass)

我不太确定这是否是 Mongo 的方式,但我很确定它有效:)

或者,您可以省略other_classes属性MyClass以避免冗余,但是您需要这样的查询来获取“子”对象:

Other_Class.objects(myclass = myclass.id)
于 2012-08-03T08:34:39.113 回答
0

试试这个查询:

oc = Other_Class()
MyClass.objects.find( other_classes__all = [oc.id] )
于 2012-08-03T08:38:36.513 回答