MongoDB $match $group 查询慢
Posted
技术标签:
【中文标题】MongoDB $match $group 查询慢【英文标题】:MongoDB $match $group query slow 【发布时间】:2020-03-21 07:05:24 【问题描述】:所以我对大约 500k 文档进行了以下查询,并且在数据库方面确实很慢:
db.collection('news').aggregate(
[
$match:
feeds: $in: feeds ,
createdAt: $lte: lastPostDate ,
deleted:
$exists: false
,
$group:
_id: title: '$title' ,
id: $first: '$_id' ,
title: $addToSet: '$title' ,
source: $first: '$source' ,
shortid: $first: '$shortid' ,
stats: $first: '$stats' ,
log: $first: '$log' ,
createdAt: $first: '$createdAt' ,
feedUpdated: $first: '$feedUpdated' ,
media: $first: '$media' ,
title: $first: '$title'
,
$sort: sort ,
$skip: limit * (page - 1)
,
$limit: limit * 1
],
allowDiskUse: true,
cursor:
)
我知道 allowDiskUse 让它变慢了,但如果我禁用它,我会得到:
MongoError: 超出 $group 的内存限制,但不允许 外部排序。传递 allowDiskUse:true 以选择加入。
【问题讨论】:
【参考方案1】:let aggregation = MongoSchemaModel.aggregate([]);
aggregation.options = allowDiskUse: true ;
aggregation.exec((err, data) => );
或
let aggregation = MongoSchemaModel.aggregate([], allowDiskUse: true );
aggregation.exec((err, data) => );
参考:- https://mkyong.com/mongodb/mongodb-sort-exceeded-memory-limit-of-104857600-bytes/
【讨论】:
以上是关于MongoDB $match $group 查询慢的主要内容,如果未能解决你的问题,请参考以下文章
使用 $match 和 $group 的 mongoDB 查询(过滤过去 24 小时记录的数据和具有 id 和计数的组)