如何使用QueryBuilder查询用户的朋友的帖子?

问题描述

我想从数据库查询所有用户朋友的帖子。我已经制定了以下代码,该代码似乎可以正常工作,但看起来效果并不理想,尤其是我过滤包含用户ID的帖子的部分。

user.$friends
    .query(on: request.db)
    .all()
    .flatMap { (friends: Array<User>) -> EventLoopFuture<Page<Post>> in
        return Post
            .query(on: request.db)
            .filter(\.$user.$id ~~ friends.reduce(into: [],{ (ids: inout Set<UUID>,user: User) in
                if let id: UUID = user.id {
                    ids.insert(id)
                }
            }))
            .sort(\.$createdAt)
            .paginate(for: request)
    }

如何清除此代码

解决方法

我没有机会进行测试,但这看起来是正确的:

return user.$friends
    .query(on: request.db)
    .all()
    .flatMap { (friends: Array<User>) -> EventLoopFuture<Page<Post>> in
        return friends.map { friend in
            return Post
                .query(on: request.db)
                .filter(\.$user.$id == friend).all()
        }.flatten(on: request.eventLoop)
        .sort(\.$createdAt)
        .paginate(for: request)
    }

查询返回的是Posts数组,因此在对其进行排序和分页之前,需要将其展平。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...