0
当我尝试从mongodb集合中获取数据时,出现以下异常。这个集合有非常大的数据。Java与mongodb
唯一的例外是:
com.mongodb.MongoQueryException: Query failed with error code 10334 and error message 'BSONObj size: 24020168 (0x16E84C8) is invalid. Size must be between 0 and 16793600(16MB)' on server 10.15.0.227:27017
而下面是我的查询这是我用来从MongoDB中获取数据:
db.getCollection('triggered_policies').aggregate(
[{ "$match" : { "policy_name" : "EIQSOC-1040-ec"}},
{ "$project" : { "cust_created_at" : { "$add" : [ "$created_at" , 19800000]} , "event_ids" : "$event_ids" , "trigger_time" : "$trigger_time" , "created_at" : "$created_at" , "triggered_rules" : "$triggered_rules"}},
{ "$sort" : { "created_at" : -1}},
{ "$group" :
{ "_id" :
{
"$hour" : "$cust_created_at"} ,
"triggered_policies" : { "$addToSet" : { "trigger_time" : "$trigger_time" , "created_at" : "$created_at" , "event_ids" : "$event_ids" , "triggered_rules" : "$triggered_rules"}
}
}
},
{ "$sort" : { "_id" : 1}}
])
下面是我们得到的确切异常:
Error: getMore command failed: {
"ok" : 0,
"errmsg" : "BSONObj size: 25994482 (0x18CA4F2) is invalid. Size must be between 0 and 16793600(16MB)",
"code" : 10334
}
请帮助我们解决问题。
在created_at上定义索引应该有助于减少聚合过程中操纵的数据大小。 –
谢谢JayKrish的快速回复。 但帮我准备那种查询。 –
问题出在$ group,因为您使用$ addToSet,它会将所有唯一数据添加到数组并增加文档大小。相反,尝试从这些文档中只获取所需的值。 – JayKrish