Django Mongoengine延迟发生在使用select_related()之后

Django Mongoengine延迟发生在使用select_related()之后,django,mongodb,mongoengine,Django,Mongodb,Mongoengine,如果我对select_related()的理解完全错误,这可能是一个愚蠢的问题 这是我的数据库设计 class UserAccount(Document): first_name = StringField(max_length = 20) last_name = StringField(max_length = 20) user_name = StringField(max_length = 20) friends = ListField(ReferenceF

如果我对select_related()的理解完全错误,这可能是一个愚蠢的问题

这是我的数据库设计

class UserAccount(Document):
    first_name = StringField(max_length = 20)
    last_name = StringField(max_length = 20)
    user_name = StringField(max_length = 20) 
    friends = ListField(ReferenceField('self'))
查询集是:

u = UserAccount.objects.get(user_name="something").select_related()
我已将结果以“u”形式传递给Django模板。所以我在模板中尝试了这个

{% for friend in u.friends %}
    {% for f in friend.friends %}
        {{ f.friends }}
    {% endfor %}
{% endfor %}
我可以在浏览器中看到我朋友的朋友的朋友。select_related()的工作不是为了阻止这里发生的进一步解引用吗


如果我错了,请纠正我

首先警告一句,这不仅是一个关系模式,而且是一个递归关系模式。您可以遵循这些关系,最终加载所有
UserAccount
对象

请记住,MongoDB中没有连接
,因此您要求客户端代码(mongoengine)为您执行应用程序内连接,这意味着需要多次查询,然后将结果分配给正确的文档,这非常昂贵。因此,请扪心自问:“这是适合这份工作的工具吗?”

但是,您的观察结果是正确的-默认情况下,仅向下移动单个关系,因此对于用户对象,它将仅取消引用第一组朋友,而不是他们的朋友。您可以通过将深度传递到
选择相关(max\u depth=2)
来更改深度