Mongodb 如何查询嵌套的异构文档

Mongodb 如何查询嵌套的异构文档,mongodb,Mongodb,我有一个具有以下格式的数组: data{ [sequentialId]{guid:value1,name:value2} } 我需要做一些类似db.data.find(“data.?.name”:“value1”)的事情 我看到的所有解决方案都不起作用,因为它们希望我知道属性的名称,但在本例中,ID是连续的 我已经研究了这里描述的查询嵌套文档的标准方法 我还考虑了一些选项,比如$REWIND,但我无法让任何东西起作用 这是一个小样本 {"41":{"b":453081600,"f":1,"

我有一个具有以下格式的数组:

data{
  [sequentialId]{guid:value1,name:value2}
}
我需要做一些类似db.data.find(“data.?.name”:“value1”)的事情

我看到的所有解决方案都不起作用,因为它们希望我知道属性的名称,但在本例中,ID是连续的

我已经研究了这里描述的查询嵌套文档的标准方法 我还考虑了一些选项,比如$REWIND,但我无法让任何东西起作用

这是一个小样本

{"41":{"b":453081600,"f":1,"h":171,"s":4,"w":4,"wr":[2,0]},
"80":{"b":337132800,"f":2,"h":169,"s":4,"w":4,"wr":[0,0]},
"388":{"b":148694400,"f":1,"h":188,"l":{"c":[{"e":2001,"g":13,"m":292,"s":1992,"t":18},{"e":2006,"g":11,"m":197,"s":2001,"t":1},{"e":2009,"g":2,"m":111,"s":2006,"t":1790},{"e":2009,"g":0,"m":1,"s":2009,"t":1937},{"e":2010,"g":1,"m":14,"s":2010,"t":1},{"e":2011,"g":0,"m":8,"s":2010,"t":13}],"n":[{"e":2007,"g":1,"m":73,"s":1996,"t":1318}]},"s":2,"w":3,"wr":[0,0]}}

例如,在这组数据中,我可能需要查询“f”=1的所有文档,以下查询可以获得预期的输出:

注意:我们提取的文件的
名称
等于
a

数据集:

{
  "data":[
    {
      "41": {
        "b": 453081600,
        "name": "a"
      },
      "80": {
        "b": 337132800,
        "name": "b"
      },
      "388": {
        "b": 148694400,
        "name": "c"
      }
    }
  ]
}
{
  "data":[
    {
      "41": {
        "b": 453081600,
        "name": "b"
      },
      "80": {
        "b": 337132800,
        "name": "b"
      },
      "388": {
        "b": 148694400,
        "name": "c"
      }
    }
  ]
}
{
  "data":[
    {
      "41": {
        "b": 453081600,
        "name": "a"
      },
      "80": {
        "b": 337132800,
        "name": "b"
      },
      "388": {
        "b": 148694400,
        "name": "c"
      }
    }
  ]
}
输出:

{
  "data":[
    {
      "41": {
        "b": 453081600,
        "name": "a"
      },
      "80": {
        "b": 337132800,
        "name": "b"
      },
      "388": {
        "b": 148694400,
        "name": "c"
      }
    }
  ]
}
{
  "data":[
    {
      "41": {
        "b": 453081600,
        "name": "b"
      },
      "80": {
        "b": 337132800,
        "name": "b"
      },
      "388": {
        "b": 148694400,
        "name": "c"
      }
    }
  ]
}
{
  "data":[
    {
      "41": {
        "b": 453081600,
        "name": "a"
      },
      "80": {
        "b": 337132800,
        "name": "b"
      },
      "388": {
        "b": 148694400,
        "name": "c"
      }
    }
  ]
}
查询分析:

  • 我们正在创建一个过滤数组,以仅保存
    数据
    数组中的记录,该数组包含
    名称
    等于
    a
    ,位于具有未知键的任何子文档中
  • 首先将
    数据的每个文档
    转换为键值对数组。现在我们可以直接查询值,而不用担心键
  • 最后,过滤
    filtered
    数组大小大于零的文档

您能提供实际数据的样本吗,我试一试!!(编辑:将示例推到顶部以便我可以对其进行格式化)这些都是文档中的单个对象还是文档字段数组中的单个对象,还是不同文档中的单个对象?数据是@srinivasy提供的JSON转储文件