Допустим, у нас есть следующая коллекция фильмов
- Каждый фильм имеет начало и конец FrameID
- Каждый фильм разделен на главы с уникальным именем (массив документов), которыетакже имеют начало и конец FrameID
- Начало и конец фильма FrameID - это максимальная и минимальная главы FrameID
- Фильм также помечен данными (массив документов), у них есть начало и конец FrameID(между главами имеется продолжение диапазона кадров)
Мы должны поддерживать два типа запросов:
- Дайте мне главы, которые имеют LABEL-X и (пересечение) /или (объединение) LABLE-Y ...
- Дайте мне фильмы, которые имеют 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, но безуспешно