为什么 mongo 聚合在 shell 中有效,但在 PHP 中超过 16MB
Why mongo aggregate works in the shell but exceeds 16MB in PHP
我有一个相当大的 mongo 聚合命令。
db.container_product.aggregate([
{"$unwind":"$product"},
{"$group":{"_id":"$product","container_ids":{"$push":"$container_id"}}}
])
它产生了近 5k 个组,但它们都是普通整数。例如:
{
"_id" : NumberInt(107058402),
"container_ids" : [
NumberInt(107058409),
NumberInt(107058410),
NumberInt(107058411),
NumberInt(107058412),
NumberInt(107058413)
]
}
当我在 shell 中 运行 时它工作得很好(普通 shell,还有 Robomongo 等)。但是当我尝试从 PHP 运行 它时,它给了我 16MB 错误。
172.16.0.2:27017: exception: aggregation result exceeds maximum document size (16MB)
在这种情况下,PHP 和 shell 之间的巨大区别是什么?
我该如何解决这个问题?
Shell 对 aggregate command, which implicitly uses cursor 使用 js 包装器,因此它可以 return 任何大小的结果(每个文档 16 MB 的限制仍然适用)。您可以通过在 shell.
中调用 db.collection.aggregate
查看包装器的源代码
在PHP MongoCollection::aggregate calls the command directly to return a single document, not a cursor. You need to use MongoCollection::aggregateCursor中代替。
我有一个相当大的 mongo 聚合命令。
db.container_product.aggregate([
{"$unwind":"$product"},
{"$group":{"_id":"$product","container_ids":{"$push":"$container_id"}}}
])
它产生了近 5k 个组,但它们都是普通整数。例如:
{
"_id" : NumberInt(107058402),
"container_ids" : [
NumberInt(107058409),
NumberInt(107058410),
NumberInt(107058411),
NumberInt(107058412),
NumberInt(107058413)
]
}
当我在 shell 中 运行 时它工作得很好(普通 shell,还有 Robomongo 等)。但是当我尝试从 PHP 运行 它时,它给了我 16MB 错误。
172.16.0.2:27017: exception: aggregation result exceeds maximum document size (16MB)
在这种情况下,PHP 和 shell 之间的巨大区别是什么?
我该如何解决这个问题?
Shell 对 aggregate command, which implicitly uses cursor 使用 js 包装器,因此它可以 return 任何大小的结果(每个文档 16 MB 的限制仍然适用)。您可以通过在 shell.
中调用db.collection.aggregate
查看包装器的源代码
在PHP MongoCollection::aggregate calls the command directly to return a single document, not a cursor. You need to use MongoCollection::aggregateCursor中代替。