给定一个大型(数十万)事件文档集合(例如见下文),检索_id大于( n ) 的第一个事件的最高效方法是什么?
示例文档
{
_id: NumberLong(352757), // Uniqueness guaranteed
type: "BallDropped",
createdAt: "2014-01-01T00:00:00Z",
// ... followed by dynamic properties of unknown size
}
当前实施
给定许多事件的集合,检索_id 大于 35的第一个事件。
首先,使用聚合检索事件的id。
我这样做是假设投影阶段(仅返回 id)将比循环遍历未知大小的完整文档更高效。
db.events.aggregate(
{ $project: { _id: 1 } },
{ $match: { _id: { $gt: NumberLong(35) } } },
{ $sort: { _id: 1 } },
{ $limit: 1 }
)
然后,我使用返回的 _id 调用 findOne 来检索该文档。
你觉得呢?你有没有什么想法?