2016-05-06 5 views
2

enthält würde Ich mag Wert auf ein Array in einem Datensatz anzufügen, die der folgenden ähnelt:Wie nur Array anzuhängen, wenn es nicht Wert mit rethinkDB

{ 
    _id: 'foo', 
    cols: [ 
    'abc123', 
    '123abc' 
    ] 
} 

Es ist möglich, dass diese Feld existiert nicht und muss vor dem Anhängen erstellt werden. Ich möchte auch nicht an das Array anhängen, wenn der Wert bereits im Array vorhanden ist. Bis jetzt habe ich das Folgende, das alle außer der letzten Anforderung erfüllt, doppelte Einträge nicht hinzuzufügen.

r.table('users') 
.get(userId) 
.update({ 
    cols: r.row('cols').default([]).append(uuid) 
}) 

Jede Hilfe geschätzt, danke!

+2

können Sie versuchen, so weit wie ich mit '' 'setInsert''' https://www.rethinkdb.com/api/javascript/set_insert/ Distinct wissen definiert, dass es keine Duplikate – char

Antwort

3

Sie haben mehrere Lösungen.

r.table('users') 
.get(userId) 
.update({ 
    cols: r.branch(r.row('cols').default([]).contains(uuid), 
        r.row('cols'), 
        r.row('cols').default([]).append(uuid)) 
}) 

Oder können wir setInsert als @Char Vorschläge verwenden

r.table('users') 
.get(userId) 
.update({ 
    cols: r.row('cols').default([]).setInsert(uuid)) 
}) 

Das Problem mit setInsert ist es eine Reihe gewährleisten zurück. Also, wenn Sie absichtlich doppelte Elemente in Original cols gelegt haben, wird es dup Element entfernen.

+0

Dank! Ich beendete die Verwendung der setInsert, denn das ist die Funktionalität, die ich brauche. Ich muss die "Zweig" -Methode weiter untersuchen. Weißt du, ob einer davon leistungsfähiger ist? – hatch

Verwandte Themen