mongodb 查詢數據默認占用最大內存為100M,如果查詢涉及到大量數據進行$group、$sort時會拋出類似以下的異常:
Received error in response from ins-mongodb-03:27018: { $err: \"Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in.\", code: 16945
秩序要在查詢時添加{allowDiskUse: true}可以將查詢結果保存到臨時文件進行排序分組,來查看結果。
例如:
db.visits.aggregate( [ {"$match":{"_id":{"$gte":ObjectId("5ae73d800000000000000000"),"$lt":ObjectId("5b101c000000000000000000")}}}, {"$group":{"_id":"$sip","cid":{"$addToSet":"$cid"},"count":{"$sum":1}}}, {"$project":{"_id":"$_id","cid":"$cid","cidcount":{"$size":"$cid"},"count":"$count"}}, {"$sort":{cidcount:-1}} ],{allowDiskUse: true} )