Два документа могут иметь одинаковый IMAGE_CONTENT_INSTANCE_HANDLE
, а состояние может быть BOOKED
или RELEASED
но я хочу, чтобы все дескрипторы экземпляров изображения были только RELEASED
,
В настоящее время я делаю это, запустив два запроса, которые привели к проблемам с производительностью.
{
"state" : "RELEASED"
}
с проекцией {"imageContentInstance.handle": 1}
я перебираю результат, полученный из этого запроса
и запускает другой запрос, как показано ниже, и исключает дескрипторы, которые также находятся в состоянии BOOKED, из списка. Таким образом, я получаю дескрипторы только в состоянии RELEASED
while (cursor.hasNext()) {
ICI ici = objectMapper.readValue(result, ICI_COLLECTION_TYPE_REF);
String result = JSON.serialize(cursor.next());
try {
queryDocument = { "imageContentInstance.handle" : ici.getImageContentInstance().getHandle() , "state" : "BOOKED"}
Document bookedDoc = iciDAO.findOne(queryDocument);
if (null != bookedDoc)
LOGGER.debug("Calling continue and skipping booked state ");
continue;
}
iciHandles.add(ici.getImageContentInstance().getHandle().toString());
LOGGER.debug("ImageInstanceHandle is added to the lisr and the lise is "+iciHandles.size());
}
Я хочу добиться этого в одном монго-запросе в качестве примера запроса, написанного на SQL, чтобы повысить производительность. Я действительно ценю ваши комментарии.
SELECT *
FROM ici i
WHERE i.state = 'RELEASED'
AND NOT EXISTS
(SELECT * FROM ici ic WHERE ic.handle = i.handle AND ic.state = 'BOOKED'
);
пример:
Предположим, что документы указаны ниже
{
"_id" : ObjectId("58c9f524fa8cd6a517cf5ddf"),
"imageContentInstance" : {
"handle" : "ICI:1234",
"key" : null,
}
"instanceHandle" : "LCI:RNBM12",
"state" : "BOOKED",
}
{
"_id" : ObjectId("58c9f524fa8cd6a517cf5ddf"),
"imageContentInstance" : {
"handle" : "ICI:1234",
"key" : null,
}
"instanceHandle" : "LCI:RNBM13",
"state" : "RELEASED",
}
{
"_id" : ObjectId("58c9f524fa8cd6a517cf5ddf"),
"imageContentInstance" : {
"handle" : "ICI:456",
"key" : null,
}
"instanceHandle" : "LCI:RNBM14",
"state" : "RELEASED"
}
Мой запрос должен возвращать дескриптор только одного последнего документа .ie, документа со статусом только со статусом RELEASED. Я застрял, я действительно ценю ваши идеи по улучшению этого.