#mongodb #mongoose #mongodb-query #aggregation-framework #spring-data-mongodb
Вопрос:
У меня несколько документов, и мне нужно отсортировать документ, в то время как имя поля сортировки неизвестно, отсортируйте документ, если поле поиска ввода соответствует какому-либо документу, и отсортируйте на основе наилучшего результата. а также поиск входных данных-это не точное название, это могут быть примеры регулярных выражений :
[
{
"cat_id":1,
"categoryCode":"categoryCode1",
"categoryName":"categoryName1",
"cat_type":"A",
"description":"Mens Upper Shirt"
},
{
"cat_id":2,
"categoryCode":"categoryCode2",
"categoryName":"categoryName2",
"cat_type":"A",
"description":"Shirt"
},
{
"cat_id":3,
"categoryCode":"categoryCode3",
"categoryName":"categoryName3",
"cat_type":"Women Top wear",
"description":"cloths"
},
{
"cat_id":4,
"categoryCode":"categoryCode4",
"categoryName":"categoryName4",
"cat_type":"A",
"description":"Women"
}
]
если поиск=»Рубашка», то ответ будет:
[
{
"cat_id":2,
"categoryCode":"categoryCode2",
"categoryName":"categoryName2",
"cat_type":"A",
"description":"Shirt"
},
{
"cat_id":1,
"categoryCode":"categoryCode1",
"categoryName":"categoryName1",
"cat_type":"A",
"description":"Mens Upper Shirt"
}
]
если поиск=»Женская верхняя одежда», то ответ будет :
[
{
"cat_id":3,
"categoryCode":"categoryCode3",
"categoryName":"categoryName3",
"cat_type":"Women Top wear",
"description":"cloths"
},
{
"cat_id":4,
"categoryCode":"categoryCode4",
"categoryName":"categoryName4",
"cat_type":"A",
"description":"Women"
}
]
при любом вводе, который вам нужно выполнить, он проверит, существует ли это значение во всех 5 атрибутах, если оно существует, затем вернет этот документ и отсортирует по наилучшему совпадению
Ответ №1:
Вы используете для этого неправильную базу данных, Mongo не является поисковой системой, и, следовательно, использование ее для этих целей всегда будет иметь свои пределы. Я рекомендую вам рассмотреть более подходящее решение, такое как elasticsearch или поиск по атласу монго.
Самая большая проблема с использованием Mongo для этого-ваше требование:
сортировка по лучшему совпадению
Что именно определяет наилучшее соответствие? в поисковых системах, которые я предлагаю, есть встроенный механизм подсчета очков для таких вещей. но если мы собираемся сделать это в Монго, вам придется самостоятельно определить логику, которая в основном равна построению всего метода подсчета очков для базы данных ( что непростая задача, если вы хотите, чтобы она была стабильной и успешной ).
Я не буду утруждать себя добавлением кода puesdo к этому, так как я не советую этого делать, но, как вы упомянули, вам в основном нужно выполнять поиск по регулярным выражениям. после того, как вы сопоставили документы, остаются только вычисления баллов на основе логики, которую вы хотите определить для сортировки «лучшего» соответствия.