2016-05-14 39 views
0

比方說,這是我的證件之一的RethinkDB的uuid: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')))