2016-04-23 27 views
3

如果數組存在或者創建數組並插入到數組中,我們應該如何將一個項追加到數組中。創建或追加到rethinkdb文檔中的數組

我試過合併命令,但是不允許合併數組,只能替換它們。

r.db('testdb').table('users').get('27e55a4a-a6f8-4ec9-bd02-f55f206700ff').merge({ 'hobbies':['Reading'] }) 

我還試圖傳遞一個函數,但似乎沒有工作:

r.db('testdb').table('users').get('27e55a4a-a6f8-4ec9-bd02-f55f206700ff').merge(function(user) { 
    return r.branch(user('hobbies').eq(null), 
        { 'hobbies' : ['Reading'] } 
       user('hobbies').append('Reading')) 
}); 

考慮下面的文檔結構:

{ 
"email": [email protected], » 
"id": "27e55a4a-a6f8-4ec9-bd02-f55f206700ff" , 
"image": https://lh4.googleusercontent.com/-O4ZXcLRpkHE/AAArAAAAAAAI/AdAAAAAAALMM/Fq968TTkd88Y/photo.jpg?sz=50, » 
"name": "John Doe" 
} 

如果我想補充的愛好作爲數組如何我應該這樣做嗎?如果愛好陣列存在或不存在,查詢必須工作。

回答

3

最慣用的方法是.update(function(user) { return {hobbies: user('hobbies').default([]).append('reading')}; })

+0

有人可能會想使用的,而不是追加setUnion,因爲它確保您沒有添加重複。 – aknuds1

0

最後我想出了自己。

r.db('testdb').table('users') 
       .get("27e55a4a-a6f8-4ec9-bd02-f55f206700ff") 
       .update(function(user){ 
        return r.branch(user.hasFields('hobbies'), 
         { hobbies: user('hobbies').append('reading')}, 
         { hobbies : ['reading']} 
         )})