Пожалуйста, обратитесь к структуре документа ниже (в разделе «Сборник документов»).Я хочу написать запрос, который даст мне документы, основанные на таймингах спроса, и отфильтрует ресурсы, у которых уже есть требования для данных таймингов, и предоставит мне доступные ресурсы для данной потребности (только на основе таймингов).Каждый ресурс имеет массив спроса с таймингами спроса.
В основном нам нужны документы, которые удовлетворяют условию ниже для каждого вложенного документа в массиве спроса.
startTime: {$gte: demand.EndTime}, endTime: {$lte: demand.StartTime}
Следовательно, невозможно найтилюбой подходящий оператор, которого я решил инвертировать результаты для "несоответствующих" документов .
Просто, чтобы упростить задачу, я создал нижеуказанные требования и ресурсы спросадокументы и результаты для MongoDb и CosmosDb.
Запрос спроса:
db.getCollection('try').
find(
{"demands":
{ $not:
{$elemMatch:
{
startTime: {$lt: 8}, endTime: {$gt: 6} //startTime: {$lt: demand.endTime}, endTime: {$gt: demand.startTime}
}
}
}
}
)
Сборник документов
Doc1:
{
"_id" : 10439090,
"demands" : [
{
"_id" : 1003,
"name" : "Barclays Project",
"startTime" : 10,
"endTime" : 20
},
{
"_id" : 1003,
"name" : "Barclays Project",
"startTime" : 30,
"endTime" : 40
},
{
"_id" : 1003,
"name" : "Barclays Project",
"startTime" : 5,
"endTime" : 9
},
{
"_id" : 1003,
"name" : "Barclays Project",
"startTime" : 80,
"endTime" : 90
}
]
}
Doc2:
{
"_id" : 10439091,
"demands" : [
{
"_id" : 1003,
"name" : "Barclays Project",
"startTime" : 111,
"endTime" : 211
},
{
"_id" : 1003,
"name" : "Barclays Project",
"startTime" : 50,
"endTime" : 80
},
{
"_id" : 1003,
"name" : "Barclays Project",
"startTime" : 20,
"endTime" : 30
},
{
"_id" : 1003,
"name" : "Barclays Project",
"startTime" : 80,
"endTime" : 90
}
]
}
Локальный результат MongoDb: Только Doc2
Результат CosmosDb: И Doc1, и Doc2
Почему результаты отличаются?Любая идея?
Что я могу понять, так это то, что запрос вообще не работает для CosmosDB.Любые альтернативные решения были бы очень полезны.
Спасибо