Я работаю с набором данных, состоящим из вероятностных зашифрованных элементов, неотличимых от случайных выборок. Таким образом, последовательные шифрования одного и того же номера приводят к разным зашифрованным текстам. Однако они все еще сравнимы с помощью специальной функции, которая применяет алгоритмы, такие как SHA256, для сравнения двух зашифрованных текстов.
Я хочу добавить список описанных зашифрованных текстов в базу данных MongoDB и проиндексировать ее с использованием древовидной структуры (то есть: AVL). Я не могу просто применить стандартную индексацию базы данных, потому что, как описано, записи должны быть сопоставимы с использованием специальной функции.
Пример: предположим, что у меня есть база данных db и коллекция c, состоящая из следующего типа документа:
{
"_id":ObjectId,
"r":string
}
Кроме того, пусть F (int, string, string) будет следующей функцией:
F(h,l,r) = ( SHA256(l | r) + h ) % 3
где оператор | является стандартной функцией конкатенации.
Я хочу выполнить следующий запрос эффективным способом, например, в коллекции с подходящей индексацией:
db.c.find( { F(h,l,r) :{ $eq: 0 } } )
для h и l выбраны произвольно, но не константы. I.e.: Предположим, что я хочу найти все записи, которые удовлетворяют F (h1, l1, r) для некоторой пары (h1, l1). Позже, в другой момент, я хочу сделать то же самое, но используя (h2, l2) такие, что h1!= H2 и l1!= L2. h и l могут принимать любое значение в наборе целых чисел.
Как я могу это сделать?