Arrays Mongo按两列分组,并从另一列返回值数组
我想查询一个mongoDB。我了解如何在sql中实现这一点,但不确定如何在MongoDB中实现Arrays Mongo按两列分组,并从另一列返回值数组,arrays,mongodb,Arrays,Mongodb,我想查询一个mongoDB。我了解如何在sql中实现这一点,但不确定如何在MongoDB中实现 select distinct value, type, array_agg(distribution) as distributions from t group by value, param_type; 我正在尝试此操作,但不断出现错误: db.getCollection('test').aggregate([ { $group: { _id: { &
select distinct value, type, array_agg(distribution) as distributions
from t
group by value, param_type;
我正在尝试此操作,但不断出现错误:
db.getCollection('test').aggregate([
{
$group: {
_id: {
"type": "$type",
"value": "$value"
},
allowDiskUse: true ,
distribution: {
$addToSet: "$distribution"
}
}
}]
)
Failed to execute script.
Error: command failed: {
"ok" : 0,
"errmsg" : "The field 'allowDiskUse' must be an accumulator object",
"code" : 40234,
"codeName" : "Location40234"
} : aggregate failed :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
doassert@src/mongo/shell/assert.js:18:14
_assertCommandWorked@src/mongo/shell/assert.js:583:17
assert.commandWorked@src/mongo/shell/assert.js:673:16
DB.prototype._runAggregate@src/mongo/shell/db.js:266:5
DBCollection.prototype.aggregate@src/mongo/shell/collection.js:1012:12
DBCollection.prototype.aggregate@:1:355
@(shell):1:1
aggregate
将管道作为第一个参数,它基本上是一个对象数组。所以我会尝试这样做:
db.getCollection('test').aggregate([
{
$group: {
_id: {
"type": "$type",
"value": "$value"
},
distribution: {
$addToSet: "$distribution"
}
}
}
], { allowDiskUse: true })
请注意
([…])
。另请注意,@turivishal所建议的{allowDiskUse:true}
aggregate
将管道作为第一个参数,它基本上是一个对象数组。所以我会尝试这样做:
db.getCollection('test').aggregate([
{
$group: {
_id: {
"type": "$type",
"value": "$value"
},
distribution: {
$addToSet: "$distribution"
}
}
}
], { allowDiskUse: true })
请注意([…])
。另请注意,@turivishal建议的{allowDiskUse:true}
几乎没有修复
- 管道级应位于阵列括号中
- 在
函数的第二个参数中传递aggregate()
,启用对临时文件的写入。设置为true时,聚合阶段可以将数据写入allowDiskUse:true
目录中的dbPath
子目录\u tmp
返回游标或将结果存储在集合中时,结果集中的每个文档都受BSON文档大小限制的约束,当前为16 MB;如果任何单个文档超过BSON文档大小限制,该命令将产生错误。该限额仅适用于退回的文件;在管道处理过程中,文档可能会超过此大小 内存限制:
管道级的RAM限制为100 MB。如果阶段超过此限制,MongoDB将产生错误。要允许处理大型数据集,请使用
allowDiskUse
选项启用聚合管道阶段以将数据写入临时文件
几乎没有解决办法
- 管道级应位于阵列括号中
- 在
函数的第二个参数中传递aggregate()
,启用对临时文件的写入。设置为true时,聚合阶段可以将数据写入allowDiskUse:true
目录中的dbPath
子目录\u tmp
返回游标或将结果存储在集合中时,结果集中的每个文档都受BSON文档大小限制的约束,当前为16 MB;如果任何单个文档超过BSON文档大小限制,该命令将产生错误。该限额仅适用于退回的文件;在管道处理过程中,文档可能会超过此大小 内存限制:
管道级的RAM限制为100 MB。如果阶段超过此限制,MongoDB将产生错误。要允许处理大型数据集,请使用
allowDiskUse
选项启用聚合管道阶段以将数据写入临时文件
它必须是
“$type”
,而不是$type
,这同样适用于“$value”
。谢谢。还是有错误。我将修改这个问题。管道阶段应该在数组括号中。aggregate([{$group:{…}])
。在aggregate的第二个位置传递参数{allowDiskUse:true}
。aggregate([{$group:{…}]),{allowDiskUse:true},请查看我的上一条评论,以了解将allowDiskUse
参数放在何处的正确语法。它必须是“$type”
,而不是$type
,这同样适用于“$value”
。谢谢。还是有错误。我将修改这个问题。管道阶段应该在数组括号中。aggregate([{$group:{…}])
。在aggregate的第二个位置传递参数{allowDiskUse:true}
。aggregate([{$group:{…}]),{allowDiskUse:true},请查看我的上一条评论,以了解将allowDiskUse
参数放在何处的正确语法。该参数运行,但不返回任何结果。@Sql\u Pete\u Belfast它是抛出错误还是只是一个空结果?它给出了一个错误。我只是没看到它出现在另一个屏幕上。我正在修改文件question@Sql_Pete_Belfast有关正确的语法,请参阅更新后的答案。它会运行,但不会返回任何结果。@Sql\u Pete\u Belfast它是在抛出错误还是只是一个空结果?它给出了一个错误。我只是没看到它出现在另一个屏幕上。我正在修改文件question@Sql_Pete_Belfast有关正确的语法,请参阅更新的答案。