【发布时间】:2015-03-10 23:37:48
【问题描述】:
我有一个高度嵌套的 mongoDB 对象集,我想计算与给定条件匹配的子文档的数量编辑:(在每个文档中)。例如:
{"_id":{"chr":"20","pos":"14371","ref":"A","alt":"G"},
"studies":[
{
"study_id":"Study1",
"samples":[
{
"sample_id":"NA00001",
"formatdata":[
{"GT":"1|0","GQ":48,"DP":8,"HQ":[51,51]}
]
},
{
"sample_id":"NA00002",
"formatdata":[
{"GT":"0|0","GQ":48,"DP":8,"HQ":[51,51]}
]
}
]
}
]
}
{"_id":{"chr":"20","pos":"14372","ref":"T","alt":"AA"},
"studies":[
{
"study_id":"Study3",
"samples":[
{
"sample_id":"SAMPLE1",
"formatdata":[
{"GT":"1|0","GQ":48,"DP":8,"HQ":[51,51]}
]
},
{
"sample_id":"SAMPLE2",
"formatdata":[
{"GT":"1|0","GQ":48,"DP":8,"HQ":[51,51]}
]
}
]
}
]
}
{"_id":{"chr":"20","pos":"14373","ref":"C","alt":"A"},
"studies":[
{
"study_id":"Study3",
"samples":[
{
"sample_id":"SAMPLE3",
"formatdata":[
{"GT":"0|0","GQ":48,"DP":8,"HQ":[51,51]}
]
},
{
"sample_id":"SAMPLE7",
"formatdata":[
{"GT":"0|0","GQ":48,"DP":8,"HQ":[51,51]}
]
}
]
}
]
}
我想知道有多少子文档包含 GT:"1|0",在这种情况下,第一个文档为 1,第二个文档为 2,第三个文档为 0。我已经尝试过展开和聚合函数,但我显然没有做正确的事情。当我尝试按“GT”字段计算子文档时,mongo 抱怨:
db.collection.aggregate([{$group: {"$studies.samples.formatdata.GT":1,_id:0}}])
因为我的组名不能包含“.”,但如果我把它们排除在外:
db.collection.aggregate([{$group: {"$GT":1,_id:0}}])
它抱怨是因为“$GT 不能是操作员名称”
有什么想法吗?
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework