Запросить вложенный документ с пересечением / диапазоном между диапазонами вложенных полей - PullRequest
0 голосов
/ 28 мая 2019

Допустим, у нас есть следующая коллекция фильмов

  1. Каждый фильм имеет начало и конец FrameID
  2. Каждый фильм разделен на главы с уникальным именем (массив документов), которыетакже имеют начало и конец FrameID
  3. Начало и конец фильма FrameID - это максимальная и минимальная главы FrameID
  4. Фильм также помечен данными (массив документов), у них есть начало и конец FrameID(между главами имеется продолжение диапазона кадров)

Мы должны поддерживать два типа запросов:

  1. Дайте мне главы, которые имеют LABEL-X и (пересечение) /или (объединение) LABLE-Y ...
  2. Дайте мне фильмы, которые имеют LABEL-X и (пересечение) / или (объединение) LABLE-Y ... и соответствующие начало + конец FrameID

У нас есть 10M фильмов, и каждый фильм состоит из 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 = "main AND В этой главе есть Car AND Table"

результаты должны быть: [{"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, которые удовлетворяют следующему условию: sensor.sesnsor_definition.name = "main" И есть автомобиль И таблица в фильме

Результаты должны быть следующими:

[{"_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, но безуспешно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...