我创建了一个包含超过 100 万个文档的集合,每个文档如下所示:
{ "_id" : ObjectId("56f155f6006ec8ceeec407ec"), "foo" : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 ] }
然后我编写了一个 javascript,它运行不同的聚合查询 3 次,计算增量并打印出结果。脚本如下所示:
var start = Date.now();
db.countTest.aggregate([{$unwind:"$foo"},{$group:{_id:null,"total foo":{$sum:1}}}])
var done = Date.now();
var delta1 = done - start;
print(delta1);
var start = Date.now();
db.countTest.aggregate([{$unwind:"$foo"},{$group:{_id:null,"total foo":{$sum:1}}}])
var done = Date.now();
var delta2 = done - start;
print(delta2);
var start = Date.now();
db.countTest.aggregate([{$unwind:"$foo"},{$group:{_id:null,"total foo":{$sum:1}}}])
var done = Date.now();
var delta3 = done - start;
print(delta3);
var avDelta = (delta1 + delta2 + delta3) / 3;
print ("$Unwind query: average query duration (millis):" + avDelta);
var start = Date.now();
db.countTest.aggregate([{$project:{count:{$size:"$foo"}}},{$group:{_id:null,"total foo":{$sum:"$count"}}}])
var done = Date.now();
var delta1 = done - start;
print(delta1);
var start = Date.now();
db.countTest.aggregate([{$project:{count:{$size:"$foo"}}},{$group:{_id:null,"total foo":{$sum:"$count"}}}])
var done = Date.now();
var delta2 = done - start;
print(delta2);
var start = Date.now();
db.countTest.aggregate([{$project:{count:{$size:"$foo"}}},{$group:{_id:null,"total foo":{$sum:"$count"}}}])
var done = Date.now();
var delta3 = done - start;
print(delta3);
var avDelta = (delta1 + delta2 + delta3) / 3;
print ("$Size query: average query duration (millis):" + avDelta);
这将返回以下结果:
MongoDB shell version: 3.2.0
connecting to: test
2630
2573
2563
$Unwind query: average query duration (millis):2588.6666666666665
2026
2107
2003
$Size query: average query duration (millis):2045.3333333333333
我运行了几次,展开查询一直很慢。看看更大的文档有什么不同会很有趣,因为对具有约 250k 更复杂文档的生产集合运行类似的查询所花费的时间明显长于 2-3 秒。