mongodb-编写复杂的查询,包括在嵌入式数组中排序

吉祖尔

我有一个包含以下文档的集合:

{
"_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
    }
]
} 

使用此标准:

  1. 学习等于“ 1kg”
  2. 人口处于[EUR,SAS,AMR]

我想在集合中找出符合条件1和2的人口人口数组中的文档排序的文档,按字段“值”从最低到最高,第二最低的值大于0.10

因此,为澄清起见,在以下示例中,将显示该文档。

  • 研究1公斤-人口SAS-值0.10
  • 研究1公斤-人口EUR-值0.15 <---大于0.10
  • 研究1公斤-人口AMR-值0.25

是否可以在mongodb shell中将其表示为查询?谁能帮我?非常感谢您的宝贵时间。

s7vr

您可以在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]}}}
])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章