【问题标题】:MongoDB: How to find (and return) elements in a multidimensional array?MongoDB:如何在多维数组中查找(并返回)元素?
【发布时间】:2015-10-01 17:24:07
【问题描述】:

这是 JSON 结构,注意最后一个条目有 2 个多维数组,一个用于 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

返回。我如何在 Meteor 中查询这个?我试过$elemMatch$in 但无济于事。如果您只为 MongoDB 回答这个问题,请这样做,我会尝试将其转换为 Meteor Javascript。

提前感谢您的帮助!

P.S.:这是在 Meteor 服务器端,不确定是否重要

【问题讨论】:

  • 所以你不想db.coll.find({segments: {$elemMatch: {chr: "10"}}})
  • 这可能会有所帮助stackoverflow.com/questions/3985214
  • 原则上我想要这个,但如果文档有多个元素,它也会返回所有其他元素。我想要那些 chr = 10 的元素,而不是给我其中一个元素具有 chr = 10 的所有文档。对不起,应该更清楚。

标签: javascript arrays mongodb meteor multidimensional-array


【解决方案1】:

你可以尝试用投影查找

查询

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

希望对你有帮助

【讨论】:

  • 使用 db.matches.find({ "segments.chr": "10" }, { "kit1":1, "segments.$":1 }).sort({"kit1" :1}) 作为 kit1 (key) 标识数组中包含 2+ 个元素的文档。它确实找到了两个元素,但值是相同的。见这里:{“_id”:“ZtojR5BLoFHGoXCih”,“kit1”:“F393988”,“segments”:[{“chr”:“10”,“start”:“34068234”,“end”:“50002936”, “长度”:“7.2”,“snps”:“895”}]} {“_id”:“SdhYw8gR4m9CWNHY6”,“kit1”:“F393988”,“段”:[{“chr”:“10”,“开始”:“34068234”,“结束”:“50002936”,“长度”:“7.2”,“snps”:“895”}]}
  • @a4xrbj1 - 你能告诉我们你想要什么吗,上面的答案是基于你原来的帖子。请不要混淆我们
  • 与混淆你无关,但目前数据库中有44000个文档,示例中无法显示。我在我的问题中展示了我想要返回的数据结构,并且我只想要数组中符合“chr = 10”查询的元素,而不是任何不匹配的元素。如果一个数组有多个符合条件的元素,我希望得到所有这些元素。
  • 你能看看docs.mongodb.org/manual/tutorial/…希望它会有所帮助。干杯罗希特
猜你喜欢
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 2014-11-10
  • 1970-01-01
相关资源
最近更新 更多