2016-05-14 3 views
0

Скажем, это UUID одного из моих документов в RethinkDB: 594a64ab-b78b-4838-a79f-318020a352a9RethinkDB: .get() только с частью uuid?

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

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

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

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

Возможно ли это?

+0

Решение kureikain будет работать, но почему у вас есть только часть UUID во время запроса? – dalanmiller

+0

@dalanmiller Я хочу использовать uuid как параметр URL, но не весь uuid, поскольку он действительно длинный. В мире SQL я бы просто сделал автоинкрементное целое число, но, конечно, переосмысление не было точно оптимизировано для такого типа поведения. Мысли? –

ответ

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"}] 

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

1

Вы можете сделать использовать это, но это очень медленный процесс, хотя:

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