2016-05-14 31 views
0

Lassen Sie uns sagen, dass dies die UUID eines meiner Dokumente in RethinkDB ist: 594a64ab-b78b-4838-a79f-318020a352a9RethinkDB: .get() mit nur einem Teil der UUID?

Normalerweise das Dokument abzurufen, das tue ich:

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

Gibt es irgendeine Weise, die ich die gleiche Sache erreichen kann mit nur etwas Vorsatzteil der Uuid? z.B. Ich möchte, dies zu tun:

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

Ist das möglich?

+0

@ Kureikain Lösung funktioniert, aber warum haben Sie nur einen Teil der UUID zum Zeitpunkt der Abfrage? – dalanmiller

+0

@dalanmiller Ich möchte die UUID als URL-Parameter verwenden, aber nicht die gesamte UUID, da sie wirklich lang ist. In einer SQL-Welt würde ich nur eine automatisch inkrementierte Ganzzahl machen, aber natürlich ist das Umdenken nicht genau für diese Art von Verhalten optimiert. Gedanken? –

Antwort

2

Eine andere Lösung, einschließlich aller Schritte:

1/Erstellen Testtabelle

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

2/Inhalt der Listentabelle

r.table('foo') 

Ausgang:

[ 
    {"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/Erstellen Sekundärindex

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

4/List Index Inhalt

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

Ausgang:

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

5/den Index verwenden, um das Dokument (e) mit dem Präfix "4fc2e6e8-9434"

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

Output

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

Dies ist eine längere Einrichtung und Lösung zu finden, ABER, auf einer Tabelle von zum Beispiel mehrere Millionen Dokumente, kann es wirklich schneller machen.

1

Sie können dies tun, verwenden, aber es ist allerdings langsam:

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