我有这样的结构
{
"myid" : "x47ccv1",
"info" : [
{
"id" : 0.0000000000000000,
"op" : [
"string",
"string",
"string",
"string",
"string",
],
"dc" : [
"string",
"string",
"string",
"string",
],
"lt" : [
""string",
"string",
"string",
"string",
],
"enable" : true
},
{
"id" : 1.0000000000000000,
"op" : [
"string",
"string",
"string",
"string",
"string",
],
"dc" : [
"string",
"string",
"string",
"string",
],
"lt" : [
""string",
"string",
"string",
"string",
],
"enable" : false
},
{
"id" : 2.0000000000000000,
"op" : [
"string",
"string",
"string",
"string",
"string",
],
"dc" : [
"string",
"string",
"string",
"string",
],
"lt" : [
""string",
"string",
"string",
"string",
],
"enable" : true
}
...and so on
]
}
我希望例如在enable为false时获取所有元素dc字符串或仅包含dc字符串。 我创建了一个聚合查询,如:
db.coll.aggregate([
{
$unwind:"$info"
},
{
$match:{"info.enable":false}
},{
$group:{
_id:null,
"info":{$push:"$steps.dc"},
"tot":{$sum:1}
}
}
])
它工作但很慢(7秒),因为我有120000个文件。 我也尝试创建关键信息,但我有这个错误
"err" : "Btree::insert: key too large to index ....
我也尝试在db.coll.ensureIndex上创建密钥({" info.success":1}),但我有相同的结果(7秒)
我是否更改了结构,还是可以优化此查询?