Как вы разбиваете выходные данные из агрегатного конвейера? - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь разбить серию постов на блог.У меня есть конвейер, который выводит хорошо отсортированные записи, и я пытаюсь использовать фасет для разбивки результатов.Skip и limit работают, но когда я передаю номер страницы из URL с http://localhost:5000/?page=4 в конвейер, ничего не меняется.Я до сих пор просто получаю первые 5 (или сколько я установил ограничение) сообщений

def posts_with_comment_count(page):

    pipeline = [
        {"$lookup": {
            "from": "comment",
            "localField": "_id",
            "foreignField": "post_id",
            "as": "comment_count"
        }},
        {"$addFields": {
            "comment_count": {"$size": "$comment_count"}
        }},
        {"$sort": {"_id": -1}}, 
        {'$facet': { 
            "metadata": [{"$count": "total"}, {"$addFields": {"page": int(page)}}],
            "data": [{"$skip": 0}, {"$limit": 5}] 
            }}

    ]
    posts = list(mongo.db.posts.aggregate(pipeline))
    return posts


@app.route("/")
@app.route("/home")
@app.route("/index")
def home():

    page = request.args.get('page', 1, type=int)   
    data = posts_with_comment_count(page)

    def posts():
     for post in data:
        return post['data']

    return render_template('home.html', posts=posts())
...