【发布时间】:2019-12-27 08:49:39
【问题描述】:
所以,我尝试查询
db.collection('collection_name').aggregate([
{
$match: { owner_id: '5be9b2f03ef77262c2bd49e6' }
},
{
$sort: { _id: -1 }
}])
上面的查询需要20s
但如果我尝试查询
db.collection('collection_name').aggregate([{$sort : {_id : -1}}])
仅需0.7秒
为什么没有 $match 的那个实际上比没有 match 快?
更新: 当我尝试这个查询时
db.getCollection('callbackvirtualaccounts').aggregate([
{
$match: { owner_id: '5860457640b4fe652bd9c3eb' }
},
{
$sort: { created: -1 }
}
])
只需要0.781s
为什么按 _id 排序比按创建字段排序慢?
注意:我使用的是 mongodb v3.0.0
【问题讨论】:
-
因为
$match将扫描所有集合的文档以过滤它们,然后将$sort应用于过滤的文档。 -
_id是一个索引字段,$match内的字段,即owner_id可能没有索引。
标签: mongodb mongodb-query aggregation-framework aggregate