Хобрук: Ваш путь к мастерству в программировании

RethinkDB eqJoin + MAP

у меня проблема с RethinkDB.

У меня есть 3 документа:

Лицо (поле учетной записи является дополнительным идентификатором):

{
    "account":  "3580654" , 
    "id":  "356ee84a-8eb5-4b9e-8af5-1cf1ebfe556d" ,
    "name":  "Jesus",
    "lastname":  "Omilon"
}

Местоположение (поле учетной записи является дополнительным идентификатором):

{
    "account":  "3580654" , 
    "id":  "53d02b06-8fe2-4d48-a8ab-ffd2ff519a32" ,
    "ip":  "127.0.0.1",
    "state":  "21"
}

Телефоны (поле учетной записи является дополнительным идентификатором):

{
    "account":  "3580654" , 
    "id":  "692e7e5f-85f2-444f-b6de-a2b1136b80fa" ,
    "phone":  "555-444.44.44",
    "state":  "21"
},
{
    "account":  "3580654" , 
    "id":  "079579aa-ece9-408f-9d00-889a1cb56fc4" ,
    "phone":  "555-432.33.33",
    "state":  "21"
}

поэтому я хочу присоединиться к запросу, чтобы иметь что-то вроде этого:

{
    "account": "3580654",
    "id": "356ee84a-8eb5-4b9e-8af5-1cf1ebfe556d",
    "name": "Jesus",
    "lastname": "Omilon",
    "state": 21,
    "ip": "127.0.0.1",
    "phones": ["555-444.44.44", "555-432.33.33"]
}

Может ли кто-нибудь помочь мне сделать это? Я пытаюсь использовать eqJoin и карту, но безуспешно.

Спасибо за вашу помощь.

22.10.2015

  • теперь у меня другая проблема, теперь я должен заказать это по Человеку с телефоном или исключить записи без телефонов. 24.10.2015

Ответы:


1

Спасибо за очень подробный образец данных. Это поможет ответить на него проще.

Поскольку person и location можно просто объединить, чтобы создать окончательное местоположение. Мы можем использовать eqJoin для объединения данных.

phone — это массив, поэтому мы можем запустить результат map из приведенного выше результата, внутри функции map мы запрашиваем дополнительные данные телефонной таблицы и объединяемся с основным документом.

Конечный запрос выглядит так:

r.table('Person').eqJoin('account', r.table('Location'), {index: 'account'}).zip()
  .map(function(doc) {
    return doc.merge({
      'phone': r.table('Phones').getAll(doc('account'), {index: 'account'})('phone').coerceTo('ARRAY')
    })
  })

Это дает результат:

{
    "account": "3580654",
    "id": "53d02b06-8fe2-4d48-a8ab-ffd2ff519a32",
    "ip": "127.0.0.1",
    "lastname": "Omilon",
    "name": "Jesus",
    "phone": [
        "555-444.44.44",
        "555-432.33.33"
    ],
    "state": "21"
}

Обратите внимание, что здесь у нас есть конфликт id полей Person и Location, когда мы вызываем zip(). Таким образом, вы можете немного изменить запрос, чтобы сохранить поле id, которое вам нравится.

23.10.2015
  • очень рада, что помогает. Спасибо за пометку ответа и голосование :) 23.10.2015
  • Новые материалы

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

    React Hooks: основы деструктуризации массива
    Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

    Пакеты R, используемые в Tesla
    Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

    Сокращение и слияние токенов для эффективных моделей VL: обзор
    Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..