В следующем блоке запускается столько запросов к базе данных, сколько вы отправили в user.posts
, поэтому оно все равно будет медленным.
for id in user.posts:
Post.objects.get(id=id)
, но если вы используете его так:
Post.objects.get(id__in=user.posts)
Тогда производительность будет аналогична использованию Post.objects(user=user_id)
, потому что первичный ключ индексируется по умолчанию
Я считаю, что вам также следует использовать ReferenceField io plain ObjectId.Они допускают ленивую загрузку ссылок
class Post(Document):
user = ReferenceField("User")
class User(Document):
name = StringField()
@property
def posts(self):
return Post.objects(user=self)
john = User(name='John').save()
post = Post(user=john).save()
print(john.posts()) # [<Post: Post object>]