MongoDB:如何查找(并返回)多维数组中的元素

MongoDB: How to find (and return) elements in a multidimensional array?

本文关键字:数组 元素 返回 何查找 查找 MongoDB      更新时间:2023-09-26

这是JSON结构,注意最后一个条目有两个多维数组,一个用于chr 10,一个用于chr 12:

{
  "_id": "9oFvJYeG9wpdBYunu",
  "segments": [
    {
      "chr": "7",
      "start": "140422294",
      "end": "155048283",
      "length": "29.1",
      "snps": "1666"
    }
  ]
},
{
  "_id": "HK4WXc5mR6fyesjpP",
  "segments": [
    {
      "chr": "10",
      "start": "83865742",
      "end": "90981118",
      "length": "6.3",
      "snps": "1380"
    }
  ]
},
{
  "_id": "3N4Z2dtX5PiuqmCFv",
  "segments": [
    {
      "chr": "10",
      "start": "83865742",
      "end": "90981118",
      "length": "6.3",
      "snps": "1380"
    },
    {
      "chr": "12",
      "start": "32853998",
      "end": "44834540",
      "length": "5.1",
      "snps": "1623"
    }
  ]
}

如何识别chr = 10的所有段?我想获得有关chr = 10的元素的详细信息。我想要的正是那些元素的chr = 10,而不是给我所有的文档(与所有其他的片段),其中一个元素的chr = 10。

请进一步注意,根据MongoDB文档'$elemMatch'和'$'只返回第一个匹配。然而,我的集合有文档,其中有两个或更多的元素与chr = 10。我想要得到所有的元素,在这种情况下,在一个数组中有多个chr 10元素。

我想返回以下字段:

_id, chr, start, end, length, snps

。我如何在流星查询这个?我尝试了$elemMatch$in,但无济于事。如果你只回答MongoDB,请这样做,我会尝试将其转换为流星Javascript。

提前感谢您的帮助!

注::这是在流星服务器端,不确定这是否重要

您可以尝试查找与投影

查询

db.collection.find({"segments.chr":"10"},{"segments.$":1}).pretty()

{
        "_id" : "HK4WXc5mR6fyesjpP",
        "segments" : [
                {
                        "chr" : "10",
                        "start" : "83865742",
                        "end" : "90981118",
                        "length" : "6.3",
                        "snps" : "1380"
                }
        ]
}
{
        "_id" : "3N4Z2dtX5PiuqmCFv",
        "segments" : [
                {
                        "chr" : "10",
                        "start" : "83865742",
                        "end" : "90981118",
                        "length" : "6.3",
                        "snps" : "1380"
                }
        ]
}

希望对大家有所帮助