Избежание коммутативных дубликатов в MongoDB - PullRequest
0 голосов
/ 12 ноября 2018

Фон

Я использую базу данных MongoDB для создания медицинского приложения, в котором хранится информация о препарате. В этой базе данных есть несколько коллекций, и одна из них предназначена для парных лекарственных взаимодействий. Данные предоставлены мне на основе на препарат . То есть, если A - это лекарство, которое взаимодействует с B , C и D , я получу пары (A,B), (A,C) и (A,D). Однако я снова получаю ту же информацию при разборе входных данных для лекарств B , C и D в виде (B,A) и т. Д.

Конечно, соответствующая медицинская информация идентична (т. Е. A , взаимодействующий с B , вызывает те же реакции, что и B , взаимодействующий с A ).

Структура коллекции

Коллекция структурирована как каждая document, имеющая три поля: name1, name2 и description.

При создании коллекции в первый раз и ее заполнении, есть ли способ проиндексировать эту коллекцию, чтобы (name1, name2) обрабатывался как дубликат (name2, name1) (так как они оба будут иметь одинаковый description)? Я не хотел бы вставлять такие дубликаты в коллекцию.

P.S. Я использую драйвер MongoDB Java 3.8 с MongoDB 4.0.3.

P.P.S Пример документа и информация об индексе таблицы добавлены ниже:

{
    "_id" : ObjectId("5be9eaeedb9c7a2836cdd48c"),
    "name1" : "Lepirudin",
    "name2" : "St. John's Wort",
    "description" : "The metabolism of Lepirudin can be increased when combined with St. John's Wort."
}

У меня есть восходящий индекс на name1 и name2 и текстовый индекс на description. Вышеуказанный документ вставлен для лепирудина. Я хотел бы не вставлять следующий документ для зверобоя:

{
    "_id" : ObjectId("5be9eaeedb9c7a2836cdd49e"),
    "name1" : "St. John's Wort",
    "name2" : "Lepirudin",
    "description" : "The metabolism of Lepirudin can be increased when combined with St. John's Wort."
}
...