【发布时间】:2017-02-24 10:01:05
【问题描述】:
例如,我有一个具有此架构的集合:
{
timestamp: new Date(some-arbitrary-specific-datetime),
some-other-field: any-type.
}
而一个常见的查询是过滤获取某个时间戳范围的文档:
collection.find({
timestamp: {$lte: someDate, $gte: someLaterDate}
})
性能很重要,因为这个集合很大,查询可能返回超过 100k 的文档。
在我的查询中,我只对天级别的粒度感兴趣。
我想知道是否可以根据 timestamp 的日期而不是确切的 DateTime 在集合上创建索引?
我知道可以在应用程序代码中执行此操作,方法是向集合中添加一个新字段并创建一个具有最高级别粒度的 Date 并以相同的方式查询它,即:
{
timestamp: new Date(1476479514),
date: new Date("2016-10-14"),
some-other-field: any-type
}
和查询:
collection.find({
date: {$lte: new Date("2016-10-14"), $gte: new Date("2016-10-12")}
})
并创建索引:
collection.collectionName.createIndex({date: 1});
但现在在应用程序代码中执行此操作是不可行的。我可以仅使用 timestamp 字段创建性能相似的索引吗?
【问题讨论】:
标签: mongodb mongodb-query