У меня есть мобильная таблица инвентаря, как показано ниже.
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, но он не соответствует моему требованию ..