使用嵌套字段范围之间的交集/范围查询嵌套文档

时间:2019-05-28 16:35:43

标签: mongodb mongodb-query embedded-documents

假设我们有以下电影收藏

  1. 每部电影都有一个开始和结束FrameID
  2. 每部电影都以唯一的名称(文档数组)分隔为各章,还具有开始和结束FrameID
  3. 电影的开始和结束FrameID是最大和最小章节FrameID
  4. 电影还带有标签数据(文档数组),它们具有开始和结束FrameID(各章之间有连续的帧范围)

我们应该支持两种查询类型:

  1. 请给我包含LABEL-X和(交集)/或(工会)LABLE-Y的章节...
  2. 请给我包含LABEL-X和(交叉)/或(联合)LABLE-Y ...以及相关的开始+结束FrameID的电影

我们有1000万部电影,每部电影都有50个章节和1000个标签 查询时间应少于1秒

感谢您的帮助

示例文档:

[
{"my_id":273647,
"project":"XYZ",
"upload_date":{  
   "$date":"2019-05-19T13:05:31.000Z"
},
"path":"/path/to/my/data",
"start_FrameID":1000,
"end_FrameID":10000,
"sensors":[  
   {  
      "calibration_status":{  
         "yawFull_dif":0.6,
         "autofix_injection":4,
         "horizonFull_dif":0.0,
         "roll_dif":0.6
      },
      "sesnsor_definition":{  
         "name":"main",
         "type":"camera",
         "model":"4083"
      }
   }
],
"pices":[  
   {  
      "name":"CHAP_A",
      "start_FrameID":1000,
      "end_FrameID":2000
   },
   {  
      "name":"CHAP_B",
      "start_FrameID":2000,
      "end_FrameID":3000
   },
   ....,
   {  
      "name":"CHAP_Z",
      "start_FrameID":9000,
      "end_FrameID":10000
   }
],
"lable":[  
   {  
      "name":"Table",
      "start_FrameID":1000,
      "end_FrameID":3000
   },
   {  
      "name":"Car",
      "start_FrameID":1000,
      "end_FrameID":1500
   },
   {  
      "name":"House",
      "start_FrameID":9500,
      "end_FrameID":10000
   }
],
...,
...
]

示例查询

  • 给我所有符合以下条件的章节: sensor.sesnsor_definition.name =“主要且本章中有汽车与表

结果应为: [{"name":"CHAP_A","start_FrameID":1000,"end_FrameID":2000}]

  • 给我所有符合以下条件的章节: 本章中有汽车或房屋

结果应为: [{"name":"CHAP_A","start_FrameID":1000,"end_FrameID":2000},{"name":"CHAP_Z","start_FrameID":9000,"end_FrameID":10000}]

  • 请提供所有符合以下条件的电影以及相关的start_FrameID和end_FrameID: sensors.sesnsor_definition.name =“ main”并且电影中有Car AND Table

结果应为:

[{"_id":{"$oid":"5ceba2a24a43015c5e900cd2"},...,"start_FrameID":1000,"end_FrameID":1500}]

  • 请提供所有符合以下条件的电影以及相关的start_FrameID和end_FrameID: 电影中有“汽车或房屋”

结果应为:

{"_id":{"$oid":"5ceba2a24a43015c5e900cd2"},...,"start_FrameID":9500,"end_FrameID":10000}]

顺便说一句 我们正在使用MongoDB 4.0 我尝试使用$ expr和$ eleMatch,但没有成功

0 个答案:

没有答案