2016-04-23 12 views
3

Wie sollten wir ein Element an ein Array anhängen, wenn das Array existiert, oder ein Array erstellen und einfügen.Erstellen oder Anhängen an ein Array in einem Dokument rethinkdb

Ich habe versucht, die Zusammenführung Befehl, aber das erlaubt nicht zusammenführen Arrays, nur ersetzt sie.

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

Ich versuchte, weiter eine Funktion übergeben, aber scheint nicht zu funktionieren:

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')) 
}); 

die unter doc Struktur vor:

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

Wenn ich Hobbies als Array hinzufügen möchten, wie sollte ich es machen. Die Abfrage muss sowohl funktionieren, wenn das Hobby-Array existiert oder nicht.

Antwort

3

Die idiomatische Weg .update(function(user) { return {hobbies: user('hobbies').default([]).append('reading')}; }) statt append

+0

Man könnte wollen setUnion verwenden wäre, wie es Ihnen Duplikate nicht stimmen gewährleistet. – aknuds1

0

Endlich habe ich mich selbst herausgefunden.

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']} 
         )}) 
Verwandte Themen