我有一个包含这样文件的集合:
{
"_id" : ObjectId("5a8ec4620cd3c2a4062548ec"),
"chromosome" : 1,
"start" : "1",
"reference" : "A",
"alternative" : "C",
"populationFrequencies" : [
{
"study" : "dbnlvar",
"population" : "GBL",
"value" : 0.1
},
{
"study" : "genomad",
"population" : "AF",
"value" : 0.2
},
{
"study" : "genomad",
"population" : "AFR",
"value" : 0.3
},
{
"study" : "genomad",
"population" : "AMR",
"value" : 0.4
},
{
"study" : "genomad",
"population" : "ASJ",
"value" : 0.2
}
{
"study" : "1kg",
"population" : "GBL",
"value" : 0.1
},
{
"study" : "1kg",
"population" : "EUR",
"value" : 0.15
},
{
"study" : "1kg",
"population" : "SAS",
"value" : 0.10
},
{
"study" : "1kg",
"population" : "AMR",
"value" : 0.25
},
{
"study" : "1kg",
"population" : "EAS",
"value" : 0.7
}
]
}
使用此标准:
我想在集合中找到满足条件的文件,这些文件在populationFrecuencies数组中排序,符合条件1和2,字段'value'从最低到最高,第二个最低值大于0.10
因此,为了澄清,在以下示例中,将显示该文档。
是否可以在mongodb shell中表示为查询? 谁能帮我? 非常感谢你的时间。
答案 0 :(得分:0)
使用Aggregation Framework我们可以获得所需的结果
db.collection_name.aggregate([
{$unwind:"$populationFrequencies"},
{$match:
{$and:[
{"populationFrequencies.study":"1kg"},
{"populationFrequencies.population":
{$in:["EUR", "SAS", "AMR"]}
}
]}
},
{$sort:{"populationFrequencies.value":1}}
])
首先使用$unwind打破populationFrequencies
文档数组
然后使用$match,在我们的场景中,我们需要使用$和$in来满足条件
1. Study is equal to '1kg'
2. Population is in [EUR,SAS,AMR]
最后使用$sort
上述文件的样本输出将是
{
"_id" : ObjectId("5a8ec4620cd3c2a4062548ec"),
"chromosome" : 1,
"start" : "1",
"reference" : "A",
"alternative" : "C",
"populationFrequencies" : {
"study" : "1kg",
"population" : "SAS",
"value" : 0.1
}
}
{
"_id" : ObjectId("5a8ec4620cd3c2a4062548ec"),
"chromosome" : 1,
"start" : "1",
"reference" : "A",
"alternative" : "C",
"populationFrequencies" : {
"study" : "1kg",
"population" : "EUR",
"value" : 0.15
}
}
{
"_id" : ObjectId("5a8ec4620cd3c2a4062548ec"),
"chromosome" : 1,
"start" : "1",
"reference" : "A",
"alternative" : "C",
"populationFrequencies" : {
"study" : "1kg",
"population" : "AMR",
"value" : 0.25
}
}