Arrays mongodb-在嵌入式数组中编写包含排序的复杂查询
我收集了如下文件:Arrays mongodb-在嵌入式数组中编写包含排序的复杂查询,arrays,mongodb,Arrays,Mongodb,我收集了如下文件: { "_id" : ObjectId("5a8ec4620cd3c2a4062548ec"), "chromosome" : 1, "start" : "1", "reference" : "A", "alternative" : "C", "populationFrequencies" : [ { "study" : "dbnlvar", "population" : "GBL", "value" : 0.1
{
"_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
}
]
}
使用此标准:
- 研究1kg-人群SAS-值0.10
- 研究1kg-人口EUR-值0.15使用我们可以得到预期的结果
首先,使用break键,打开文档的db.collection_name.aggregate([ {$unwind:"$populationFrequencies"}, {$match: {$and:[ {"populationFrequencies.study":"1kg"}, {"populationFrequencies.population": {$in:["EUR", "SAS", "AMR"]} } ]} }, {$sort:{"populationFrequencies.value":1}} ])
数组 然后使用,在我们的场景中,我们需要使用$and来满足标准的要求填充频率
最终使用 上述文件上的样本输出将1. Study is equal to '1kg' 2. Population is in [EUR,SAS,AMR]
{ "_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 } }
您可以在3.6中尝试下面的聚合db.col.aggregate([ {"$match":{ "populationFrequencies":{ "$elemMatch":{ "study":"1kg","population":{"$in":["EUR","SAS","AMR"]} } } }}, {"$unwind":"$populationFrequencies"}, {"$sort":{"populationFrequencies.value":1}}, {"$group":{"_id":"$_id","populationFrequencies":{"$push":"$populationFrequencies"}}}, {"$match":{"$expr":{"$gt":[{"$arrayElemAt":["$populationFrequencies.value",1]},0.10]}}} ])
使用aggregation Framework k可以很容易地完成,这样我就可以对数组进行排序,但是检查第二项的值是否大于0.10,以确定查询是否应该返回文档?在$match部分的$and中添加所需的条件。我不确定我是否解释得很好,在订购之后,我必须检查订购的第二项的值是否大于0.10。除此之外,我是否应该在展开操作中聚合拆分的项目,以再次形成单个文档?是的,我必须对您的聚合进行一些更改,因为我使用的是mongo 3.4,但这肯定是我正在寻找的解决方案。谢谢Veeram。