我的收藏架构(存储聊天消息)是(跳过某些字段):
timestamp_ms: epoch time to send message in milliseconds
text: string text
sender: sender id
convId: conversation id
当用户打开对话时,我想显示最近5条消息。所以我需要一个查询,它会选择最近的5条消息,然后按时间顺序返回它们按升序排序
例如,如果我有时间戳的行:1,2,3,4,5,6,7,8,9那么我想要结果为5,6,7,8,9
我写的最接近的查询
db.messages.find({convId: “XYZ”})排序({TIMESTAMP_MS:-1})。极限(5)
以降序(需要在内存中排序)给出结果为9,8,7,6,5。有没有办法返回这些记录,分类为5,6,7,8,9
db.messages.find({convId: “XYZ”})排序({TIMESTAMP_MS:-1})。极限(5)的.sort({TIMESTAMP_MS:1})
返回1,2,3,4,5
可以使用聚合管道来解决吗?
答案 0 :(得分:1)
是的,聚合框架是你的朋友。这样的事情应该有效:
db.messages.aggregate([
{$match: {convId:"xyz"}},
{$sort:{timestamp_ms:-1}},
{$limit:5},
{$sort:{timestamp_ms:1}}
])