Запрос на возврат всех документов, в которых поле соответствует любому элементу из списка в MongoEngine - PullRequest
0 голосов
/ 20 мая 2019

У меня есть две коллекции MongoDB.Один - Users, а другой - Posts.В пользовательской коллекции каждый документ хранит список имен пользователей, которым следует этот конкретный пользователь.Например,

{
    'username' : 'username',
    'following' : ['user1', 'user2', 'user3'],
    ...
}

И, каждый документ в коллекции Posts состоит из поля author.Теперь, чтобы создать новостную ленту, я хочу показать только сообщений пользователей, за которыми следует конкретный пользователь.

{
    'content' : 'some content',
    'author' : 'user1',
    ...
}

Можно ли написать запрос в MongoEngine (Python) так, чтобы запрашивалась коллекция Posts, и она возвращает все документы, в которых поле author принадлежит одному из авторов following список?(Список людей, за которыми следует пользователь) в хронологическом порядке.

Спасибо!

1 Ответ

0 голосов
/ 21 мая 2019

Предполагая, что у вас есть следующая модель и данные:

class User(Document):
    following = ListField(StringField())

class Post(Document):
    author = StringField()

User(following=['A', 'B']).save()
Post(author='B').save()

У вас уже должен быть список (вы не можете запросить сообщение с user_id напрямую), и тогда вы сможете достичь того, что выхотите с помощью оператора __in:

user = User.objects.first()
print(user.following)    # [u'A', u'B']
Post.objects(author__in=user.following)    # [<Post: Post object>]
...