Mongodb Mongoose 对聊天消息进行排序和分页
Mongodb Mongoose sort and paginate chat messages
我正在制作一个聊天应用程序,每页加载 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"]
上面的查询returns中的数据是这样的
第一页:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
第 2 页:["11", "12"]
但我想要它 return
第 1 页:["3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]
第 2 页:["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()
由于要先显示消息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"]
我正在制作一个聊天应用程序,每页加载 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"]
上面的查询returns中的数据是这样的
第一页:["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
第 2 页:["11", "12"]
但我想要它 return
第 1 页:["3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]
第 2 页:["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()
由于要先显示消息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"]