Запрос БД или обработчик правил для получения наилучшего соответствия заданных полей - PullRequest
1 голос
/ 28 октября 2019

У меня есть мобильная таблица инвентаря, как показано ниже.

OSType   DeviceType  Make     year     Country    Value 
(attr1)   (attr2)   (attr3)   (attr4)  (attr5)   (result)
BADA        Galaxy   Samsung   2014     IN        100
Android     null     Samsung   2015     China     150
null        J7       Samsung   2018     IN        80
Android     Note10   Samsung   2019     null      500 
Android     Note10   Samsung   2019     null      500
IOS         I7       APPLE     null     USA       500 
IOS         null     null      2019     ALL       1000

Мне нужно написать запрос типа механизма правил, чтобы найти наилучшее соответствие для нижеуказанной комбинации

Первый запрос Если все заданные параметры совпадают

if the query input is  OStype=BADA,DeviceType=Galaxy, Make=Samsung, year=2014 Country=IN 

Поскольку это прямой запрос, я могу написать прямой запрос

второй запрос Если все заданные параметры также необходимо проверить с нулевыми значениями

если запрос OStype = Android, DeviceType = Note10, Make = Samsung, год = 2019 Страна = IN

, тогда я должен вернуть 500 (потому что согласно нашему бизнес-требованию, если таблица содержит ноль или ALL Iнужно считать это поле действительным)

db.inventory.find( {
    $and : [
        { $or : [ { OStype : Android }, { OStype : null } ] },
        { $or : [ { DeviceType : Note10 }, { DeviceType : null } ] },
        { $or : [ { Make : Samsung }, { Make : null } ] },
        { $or : [ { year : 2019 }, { year : null } ] },
        { $or : [ { Country : IN }, { Country : null } ] }
    ]
} )

 This query ends up with returning more than one value because I have to consider **null** as per business requirement 

Так как выполнить этот запрос на совпадение только с одним?

Третий тип запроса - вернуть наилучшее совпадение:

если запрос имеет тип OStype = Android, DeviceType = J7, Make = Samsung, year = 2019 Country = IN В этом случае год не совпадает, но все же я должен вернуть значение 80 пользователю с лучшим описанием соответствия,

поможет справиться с тем, как обрабатывать нулевые случаи, и как написать запрос для поиска наилучшего соответствия.

Я попробовал двигатель правила droole, но он не соответствует моему требованию ..

...