我正在制作一个聊天应用程序,每页加载10条消息。消息从最旧的到最新的排序,因此新消息在底部,旧消息在顶部。我尝试使用skip()和limit()方法--它不起作用。
let count = page*10
MessageModel.find(find_query).sort({createdAt: 'asc'}).skip(count-10).limit(10).exec();
例如:
让这些是我的消息排序最古老的最新:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]
上面的查询返回如下第1页中的数据:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
第二页:["11", "12"]
但我希望它能回来
第一页:["3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]
第二页:["1", "2"]
编辑:--我试着将其排序为降序和倒转,这似乎解决了问题。
let count = page*10
const messages = await MessageModel.find(find_query).sort({createdAt: 'desc'}).skip(count-10).limit(10).exec();
const re_messages = messages.reverse()
发布于 2022-02-07 14:43:25
由于您希望首先显示消息3至12,所以需要使用'desc‘而不是'asc’进行排序,以便首先获得最新消息。这将给你["12", "11", ... "4", "3"]。现在您所要做的就是反转这个数组以获得["3", "4", ... "11", "12"]
let count = page*10
let messages = await MessageModel
.find(find_query)
.sort({createdAt: 'desc'}) // get the latest ones
.skip(count-10)
.limit(10)
.exec()
.lean(); // Get a simple array
messages.reverse(); // ["3", "4", ... "11", "12"]https://stackoverflow.com/questions/71020221
复制相似问题