2016-07-01 4 views
0

У меня есть запрос, который возвращает следующие данные из двух разных таблиц, используя eqjoin. Я хотел бы объединить left и right, но вместо того, чтобы делать zip() (это перезаписывает name и), я хочу добавить свойства права объекта влево в свойство с именем server_info, а также удалить «left» и сделать это один объект, как после операции zip, как я могу сделать это непосредственно в запросе.Соединение слева и справа

Текущий результат

[{ 
    "left":{ 
     "avatar":"a29f54048d9ec6c00913057333160a3e", 
     "joined_at":"Thu Feb 25 2016 21:29:07 GMT+00:00", 
     "name":"Zephy", 
     "uid":"132166948359241728" 
    }, 
    "right":{ 
     "icon":"2aab26934e72b4ec300c5aa6cf67c7b3", 
     "id":"81384788765712384", 
     "member_count":7888, 
     "name":"Discord API", 
     "owner_id":"53905483156684800", 
    } 
}] 

Ожидаемый результат

[{ 
    "avatar":"a29f54048d9ec6c00913057333160a3e", 
    "joined_at":"Thu Feb 25 2016 21:29:07 GMT+00:00", 
    "name":"Zephy", 
    "uid":"132166948359241728" 
    "server_info": { 
     "icon":"2aab26934e72b4ec300c5aa6cf67c7b3", 
     "id":"81384788765712384", 
     "member_count":7888, 
     "name":"Discord API", 
     "owner_id":"53905483156684800", 
    } 
}] 
+1

Вы можете показать ожидаемый результат в этом случае? –

+0

В чем вопрос? –

+0

@ ZohaibIjaz Обновлено сообщение с ожидаемым результатом. – Zephy

ответ

1

Вы можете добавить .map(function(row) { return row('left').merge({'server_info': row('right')}); }) к концу вашего запроса, чтобы получить этот эффект.

0

перебрать все объекты в списке и добавить right объект внутри left объекта под server_info ключ/имущества, а затем удалить right объект.

var arr = [{ 
"left":{ 
    "avatar":"a29f54048d9ec6c00913057333160a3e", 
    "joined_at":"Thu Feb 25 2016 21:29:07 GMT+00:00", 
    "name":"Zephy", 
    "uid":"132166948359241728" 
}, 
"right":{ 
    "icon":"2aab26934e72b4ec300c5aa6cf67c7b3", 
    "id":"81384788765712384", 
    "member_count":7888, 
    "name":"Discord API", 
    "owner_id":"53905483156684800", 
} 
}]; 

arr.forEach(function(obj){ 
    obj.left.server_info = obj.right; 
    delete obj.right; 
}); 
+0

Я искал способ сделать это непосредственно в запросе, но это тоже работает. – Zephy

+0

Но вы вставили код javascript вместо запроса mysql –

+0

Что? Я отправил документы, возвращенные запросом RethinkDB. – Zephy

1

Я ничего не знаю о rethinkdb, но если это нормально для вас вы можете сделать это с простым Javascript, с Object.assign.

var newObject = Object.assign(result[0].left, {server_info: result[0].right)}; 

Если вы хотите, вы можете, конечно, написать новый объект в самом результате:

result = Object.assign(result[0].left, {server_info: result[0].right)}; 
+0

RethinkDB уже реализует это, и он называется 'zip', и причина, по которой я не могу его использовать, заключается в том, что он заменит свойства с тем же именем (или сохранит их в этом случае). Редакция: Я имел в виду код перед редактированием, текущий должен работать. – Zephy

+0

@ Zephy right, я вижу, что вы хотите, я обновил ответ. – rpadovani

Смежные вопросы