2016-11-09 4 views
0

Ich habe ein Array in einem Dokument, das eine Liste von Benutzer-IDs enthält.
Ich möchte alle Dokumente finden, die diese Liste von Benutzer-IDs haben.Wie verwendet man .contains mit Array?

Ich weiß, ich kann so etwas tun:

r.db('unicorn') 
    .table('rooms').filter(function(doc){ 
    return doc('people').contains(
     "id-one","id-two" 
    ) 
    }) 

Ich weiß, das große arbeiten, aber ich habe die Dinge zu codieren. Wie übergebe ich die contains Funktion ein Array von Werten, um zu entsprechen?

Antwort

1

Nach einer kleinen Graben, Die einfachste Lösung war, args zu verwenden. War ein wenig nicht offensichtlich aus den Beispielen. Auf diese Weise kann ich dynamische Werte übergeben und Befehle mit ihnen ausführen.

r.db('unicorn') 
    .table('rooms').filter(function(doc){ 
    return doc('people').contains(
     r.args(["id-one","id-two"]) 
    ) 
    }) 
1

Sie können setIntersection verwenden und weitergeben Array:

r.db('unicorn') 
    .table('rooms').filter(function(doc){ 
     return doc('people').default([]).setIntersection(
     ["id-one","id-two"] 
    ).count().eq(2) 
    }) 

Also, wenn Sie Array haben:

var myArr = ["id-one","id-two"]; 

Sie können Abfrage wie folgt schreiben:

r.db('unicorn') 
    .table('rooms').filter(function(doc){ 
     return doc('people').default([]).setIntersection(myArr).count().eq(myArr.length) 
    }) 
+0

Das ist ein sehr geschickter Weg, dieses Problem anzugehen: D. Ich habe etwas sehr ähnliches versucht, bis ich auf r.args gelandet bin. – Justin

Verwandte Themen