RethinkDB — использование getNearest() с eqJoin()

Это работает, как и ожидалось, получайте все «отметки» в определенном месте.

r.table('places').eqJoin('checkinId', r.table('checkins'))

И это работает, как и ожидалось, получить все местоположения рядом с точкой.

r.table('places').getNearest(r.point(-122.1634581999,47.7542651), { index : 'places.location' })

Но это возвращает пустой массив, получает все местоположения рядом с точкой и объединяет проверки.

r.table('places').getNearest(r.point(-122.1634581999,47.7542651), { index : 'places.location' }).eqJoin('checkinId', r.table('checkins'))

Есть ли другой способ, которым я должен присоединиться ко второму столу?


person Dustin Brownell    schedule 13.12.2014    source источник


Ответы (1)


Я думаю, что getNearest возвращает поток формата {distance: <number>, doc: <doc>}, поэтому вам, вероятно, придется заменить checkinId в eqJoin на r.row("doc")("checkinId")

Так что-то вроде

r.table("places").getNearest(...).eqJoin(r.row("doc")("checkinId"), r.table("checkins"))

Причина, по которой ничего не возвращается, заключается в том, что eqJoin ведет себя как внутреннее соединение SQL, что означает, что если совпадение не найдено, левый документ не возвращается.

person neumino    schedule 14.12.2014