我有以下结构的文档:
{
"name" : "John",
"items" : [
{"key1" : "value1"},
{"key1" : "value1"}
]
}
并建立了一个简单的函数来计算"项目"的总数。
var count = 0;
db.collection.find({},{items:1}).limit(10000).forEach(
function (doc) {
if(doc.items){
count += doc.items.length;
}
}
)
print(count);
但是超过100万项后,我的函数中断,Mongo退出。我已经研究了新的聚合框架和mapreduce函数,但我不确定哪一个最适合用于这样的简单计数。
建议欢迎!谢谢。
当您使用聚合时,它变得非常容易http://docs.mongodb.org/manual/core/aggregation-pipeline/
db.collection.aggregate(
{ $unwind : "$items" },
{ $group : {_id:null, items_count : {$sum:1} }}
)
返回每个文档的项目计数,
{ $group : {_id:"$_id", items_count : {$sum:1} }}
可以存储文档的长度。项作为文档的元素。这种方法会导致磁盘冗余,但它是处理大型集合的一种快速简便的方法。
{
"name" : "John",
"itemsLength" : 2,
"items" : [
{"key1" : "value1"},
{"key1" : "value1"}
]
}
另一个选择可能是使用mapreduce,但是,我认为,没有分片mapreduce会很慢。