Мне нужно знать, почему мой запрос агрегации не выполняется во время тестирования.
Коллекция книг выглядит следующим образом,
_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
Я догадываюсь, как я связываю параметр, переданный в агрегации. Ценю ваш вклад, спасибо.