Мне поручено (эффективно) сопоставление / преобразование заданного массива объектов в значения, хранящиеся в коллекции MongoDB, и я изо всех сил пытался найти лучший способ сделать это. Схема документа коллекции следующая:
{
value: {
type: String,
unique: true,
required: true,
minLength: 1
},
translation: {
type: String,
required: true,
minLength: 1
},
mapping: {
type: Map,
of: String
}
}
Примером документа будет:
{
value: "ex",
translation: "example",
mapping: {
"0":"No examples",
"1":"One example"
}
}
{
value: "sp",
translation: "sample",
mapping: {
"0":"No samples",
"1":"One sample"
}
}
Полученные данные являются массивом объектов:
[{"name": "ex", "value": "0"}, {"name": "sp", "value": "1"}]
То, что нужно вернуть (после сопоставления), выглядит примерно так:
[{"name": "example", "value": "No examples"}, {"name": "sp", "value": "One sample"}]
Я придумал несколько способов добиться этого:
- Создайте запрос MongoDB findOne для каждого объекта во входном массиве и, если он найден, сопоставьте значения с данными в базе данных.
- Создайте один запрос MongoDB для поиска всех необходимых документов, зацикливание результатов и сопоставьте значения во входном массиве с найденными в документах.
- Создать запрос MongoDB, который находит все необходимые документы, а также отображает значения в значения БД
Очевидно, вариант 1 не так уж и хорош. Я хотел бы получить помощь в определении лучшего плана действий. Например, возможно ли вообще создать один запрос MongoDB, который находит все документы И возвращает правильное значение БД, соответствующее атрибуту «value» во входных данных (опция 3)?
Или я должен использовать другой подход к проблеме?