Сортировка и присоединение коллекций mongodb в python - PullRequest
0 голосов
/ 20 января 2019

Мне нужно знать, почему мой запрос агрегации не выполняется во время тестирования.

Коллекция книг выглядит следующим образом,

_id: 573a13a6f29313caabd17bd5
title: "TinTin And the Picaros"

Коллекция комментариев выглядит следующим образом,

_id: 5a9427648b0beebeb69579cc
name :"Andrea Le"
email :"andrea_le@fakegmail.com"
book_id : 573a1390f29313caabcd418c
text: "Rem officiis eaque repellendus amet eos doloribus. Porro dolor volupta..."
date: 2012-03-26 23:20:16.000

Одна книга может иметь несколько комментариев. Поле book_id в коллекции комментариев и поле _id в коллекции книг связывают их.

Мне нужно получить комментарии и отсортировать по дате. Агрегация, с которой я пришел, находится в функции get_book,

def get_book(id):
 books = db.books.aggregate([
            {
                '$lookup': {
                    'from': 'comments',
                    'let': {
                        'book_id': id
                    },
                    'pipeline': [
                        {
                            '$match': {
                                '$expr': {
                                    '$eq': [
                                        '$book_id', '$$book_id'
                                    ]
                                }
                            }
                        }, {
                            '$sort': {
                                'date': -1
                            }
                        }
                    ],
                    'as': 'comments'
                }}]).next()

        return books

Функция проверки следующая,

def test_fetch_comments_for_book(client):
    book_id = "573a13a6f29313caabd17bd5"
    result = get_book(book_id)
    assert len(result.get('comments', [])) == 2

Тест не пройден с ошибкой,

 AssertionError: assert 0 == 2

Я догадываюсь, как я связываю параметр, переданный в агрегации. Ценю ваш вклад, спасибо.

...