【发布时间】:2018-10-22 04:22:02
【问题描述】:
如何在调用 find 之前对 mongo 集合进行排序?我已经尝试过索引和排序,但结果仍然显示乱序。排序有效,但仅对已拉出的结果进行排序,但我需要拉出已按日期排序的结果。
events = await Event.find({
time: {
$gte:new Date()
},
$and: [
{
active: true
}
]
})
.sort("-time")
.limit(limit)
.skip(skip);
应用限制 5:
{
"data": {
"searchEvents": [
{
"date": "2018-10-22T05:00:00.000Z",
"events": [
{
"eventname": "First",
"time": "2018-10-22T05:00:00.000Z"
},
{
"eventname": "Second",
"time": "2018-10-22T05:00:00.000Z"
}
]
},
{
"date": "2018-10-23T05:00:00.000Z",
"events": [
{
"eventname": "Third",
"time": "2018-10-23T05:00:00.000Z"
}
]
},
{
"date": "2018-10-26T05:00:00.000Z",
"events": [
{
"eventname": "Fourth",
"time": "2018-10-26T05:00:00.000Z"
}
]
},
{
"date": "2018-10-26T06:00:00.000Z",
"events": [
{
"eventname": "Fifth",
"time": "2018-10-26T06:00:00.000Z"
}
]
}
]
}
}
限制为 3:仅显示第 3、4 和 5 个
使用的索引: EventsSchema.index({ time: -1});
进一步说明 问题说明:我正在尝试对无限滚动的结果进行排序。基本上,Mongo 会提取 10 个文档,然后我对这些结果进行排序,然后当用户到达底部时,它会再次跳过前 10 个。问题是,这不是按顺序排列的。如果我想要按日期排序的数据。它目前带回了前 10 个结果,并根据“自然顺序”按日期排序。如何让 Mongo 根据日期查找? *请记住 index 和 sort() 都在之后排序。
【问题讨论】:
-
您的文档是什么样的?从这个查询中返回它们的顺序是什么?
-
@JohnnyHK 我已经编辑了我的问题
-
索引是正确的方法。你能用你试过的索引更新问题吗?
-
@JohnnyHK 完成。我已经尝试过 -1 和 1。结果相同。还要在这里澄清 date.events 结构。我取回事件列表并将它们放入分组的日期中。所以忽略日期作为修复。
-
你的架构是什么样的?
标签: node.js reactjs mongodb mongoose mongoose-schema