Я использую динамический конструктор форм для хранения значений в mongo. Значение полей определяется во время выполнения.Проецирование sub-запроса в mongo
Теперь я пытаюсь позволить пользователю создать динамический вид сетки данных, чтобы они могли выбирать поля, которые они хотят увидеть с первого взгляда. Таким образом, мне нужно проецировать подмножество полей, хранящихся в элементе коллекции.
Вот пример 2 записей в коллекции
{
"_id": {
"$oid": "511ff0a8521e66d41b0d35d6"
},
"FormID": {
"$uuid": "413ba627-94bf-0ca7-49b3-9ca2a1a3e9b5"
},
"ResultID": {
"$uuid": "45f455ae-8486-aaa9-b97a-e480bfdf3db4"
},
"FieldValues": [
{
"FieldID": "first name",
"FieldValue": "John"
},
{
"FieldID": "last name",
"FieldValue": "smith"
},
{
"FieldID": "school",
"FieldValue": "high school"
},
{
"FieldID": "favorite subject",
"FieldValue": "math"
},
]
},
{
"_id": {
"$oid": "511ff0a8521e66d41b0d35d7"
},
"FormID": {
"$uuid": "413ba627-94bf-0ca7-49b3-9ca2a1a3e9b5"
},
"ResultID": {
"$uuid": "45f455ae-8486-aaa9-b97a-e480bfdf3db5"
},
"FieldValues": [
{
"FieldID": "first name",
"FieldValue": "sarah"
},
{
"FieldID": "last name",
"FieldValue": "smith"
},
{
"FieldID": "school",
"FieldValue": "high school"
},
{
"FieldID": "favorite subject",
"FieldValue": "english"
},
]
},
Скажем, я хотел бы проецировать Результат Id, Имя, Фамилия
В SQL - я бы уже FieldValues определены в его собственную таблицу, и я бы выполнил дополнительный запрос в значениях поля, где ResultId = (идентификатор результата родителя) и FieldID = «first name», затем другой подзапрос на «фамилию» и т. д., чтобы сгладить результаты.
Я пытался выяснить, как это сделать с монго. Мне удалось найти оператор $ slice, но это позволяет вам получить последовательный набор элементов массива.
Причина, по которой я не хочу получить весь документ, заключается в том, что в некоторых случаях мои клиенты определили более 400 полей для отслеживания. Уничтожение всего этого на 200 строк может означать 100 МБ данных, передаваемых по сети и десериализованных (медленных).
Любые советы/предложения будут оценены
Любопытно, почему вы отметили вопрос с помощью mapreduce? –
Я думаю, что есть способ сделать это в mapreduce, чтобы люди, которые следовали за этим тегом, могли бы помочь. Но я знал, что структура агрегации также возможна. – apexdodge