RethinkDB: .get() только с частью uuid?

Допустим, это uuid одного из моих документов в RethinkDB: 594a64ab-b78b-4838-a79f-318020a352a9

Обычно, чтобы получить документ, я делаю:

r.db("databasename").table("tablename").get('594a64ab-b78b-4838-a79f-318020a352a9')

Есть ли способ добиться того же, используя только часть префикса uuid? например Я хочу сделать это:

r.db("databasename").table("tablename").getByPrefix('594a64ab-b78b')

Это возможно?


person Anson Kao    schedule 14.05.2016    source источник
comment
Решение @kureikain будет работать, но почему у вас будет только часть UUID во время выполнения запроса?   -  person dalanmiller    schedule 15.05.2016
comment
@dalanmiller Я хочу использовать uuid в качестве параметра URL, но не весь uuid, так как он очень длинный. В мире SQL я бы просто сделал автоинкрементное целое число, но, конечно, переосмысление не совсем оптимизировано для такого типа поведения. Мысли?   -  person Anson Kao    schedule 15.05.2016


Ответы (2)


Другое решение, включая все шаги:

1/ Создать тестовую таблицу

r.table('foo').insert([
  {foo: 1},
  {foo: 2},
  {foo: 3},
  {foo: 4},
  {foo: 5}
])

2/ Список содержимого таблицы

r.table('foo')

Выход:

[
  {"foo":4,"id":"3c6873af-0dfc-41d3-99ad-894bab981635"},
  {"foo":1,"id":"302baaa5-1443-408c-bb58-7970e71129ac"},
  {"foo":2,"id":"ca5ff9c2-8079-4a19-9cfc-4e7b0a834555"},
  {"foo":5,"id":"aabb6c38-710a-444c-a4ae-b8ee14b5e802"},
  {"foo":3,"id":"4fc2e6e8-9434-4fa9-831b-4208bc82fd35"}
]

3/ Создать дополнительный индекс

r.table('foo').indexCreate('id_prefix', function(d){
  return d('id').slice(0, 13)
})

4/ Содержимое указателя списка

r.table('foo').distinct({index:'id_prefix'})

Выход:

["302baaa5-1443","3c6873af-0dfc","4fc2e6e8-9434","aabb6c38-710a","ca5ff9c2-8079"]

5/ Используйте индекс, чтобы найти документ(ы) с префиксом "4fc2e6e8-9434"

r.table('foo').getAll("4fc2e6e8-9434", {index:'id_prefix'})

Выход

[{"foo":3,"id":"4fc2e6e8-9434-4fa9-831b-4208bc82fd35"}]

Это более длинная установка и решение, НО, например, на столе с несколькими миллионами документов это действительно может сделать его быстрее.

person DevLounge    schedule 17.05.2016

Вы можете использовать это, но это медленно:

r.db("databasename").table("tablename")
  .filter(r.row('id').match('^594a64ab-b78b')))
person kureikain    schedule 15.05.2016