Rumah > Soal Jawab > teks badan
我想用mongo的聚合算个uv,但下面的命令,如图:
报错,aggregation result exceeds maximum document size (16MB)
文档中提到这个问题如图, http://docs.mongodb.org/manual/core/aggregation-pipeline-limits/,
请各位帮忙看看
感谢
天蓬老师2017-04-22 09:01:32
Terdapat terlalu banyak data untuk diproses. Anda boleh menggunakan $project untuk memilih medan seterusnya dahulu dan kemudian mengumpulkannya,
{$project:{
xxx : 1,
yyy : 1,
}
}...
PHPz2017-04-22 09:01:32
Sintaks adalah betul Saya mencuba data berikut pada mesin saya:
> db.uv.find()
{ "_id" : ObjectId("52a102490e085e51aa153478"), "ip" : "127.0.0.1" }
{ "_id" : ObjectId("52a1024b0e085e51aa153479"), "ip" : "127.0.0.2" }
{ "_id" : ObjectId("52a1024c0e085e51aa15347a"), "ip" : "127.0.0.2" }
{ "_id" : ObjectId("52a1024e0e085e51aa15347b"), "ip" : "127.0.0.3" }
Selain padanan, saya menggunakan pertanyaan pengagregatan berikut:
db.uv.aggregate({
$group: {
_id: "$ip",
uv: {
$first: 1
}
}
}, {
$group: {
_id: "result",
uv: {
$sum: "$uv"
}
}
})
Hasilnya betul
{ "result" : [ { "_id" : "result", "uv" : 3 } ], "ok" : 1 }
Oleh kerana keputusan akhir hanya satu nombor, tidak sepatutnya ada ralat sedemikian. Untuk tujuan penyahpepijatan, adalah disyorkan untuk mengeluarkan keputusan setiap langkah dalam saluran paip. Tambah { $limit: 3 }
selepas langkah untuk menjadi output, dan jalankan output tanpa mengikut langkah. Jika terdapat terlalu banyak data dan hasilnya terlalu perlahan, tambahkan had pada permulaan dan jalankannya pada data kecil dahulu.
Jika sukar untuk menukarnya berulang kali dan menjalankannya dalam cangkerang, tulis sahaja pada fail, dalam terminal
$ mongo < agg_uv.js
Pengubah hala input tidak boleh ditinggalkan, jika tidak, ia akan dijalankan dalam mod skrip, yang agak berbeza daripada mod interaktif.