2016-12-07 1 views
0

Gegeben, dass ich ein Modell Model mit einer Spalte namens items haben, die ein Array von Strings enthält, wie kann ich abfragen, ob eine Zeichenfolge queryString im Array oder ist hat ein ähnliches Element im Array?Sequelize PostgreSQL: Abfrage um zu sehen, ob die Zeichenkette in einem Array ist

Beispiel:

items: ["cat", "dog", "bird", "turtle", "doe" ]

queryString = ["%do%","%b"]

Sollte Rückkehr:

animalArray = ["dog", "doe", "bird"]


Edit: Gibt es sowieso eine $ Überlappung mit $ iLike irgendwie?

Model.findAll({ 
    where: { 
     items: { $in: { $iLike: { $any: queryString } } } 
    } 
}).then(function(array){ 
    // Do whatever here with array 
}) 

$iLike ist eine besondere Postgres Sache in Sequelize

Dank!

+0

falsche Datenstruktur sein würde. Lesen Sie die Postgresql-Array-Dokumentation (es sagt, wenn Sie Ihre Arrays suchen, haben Sie die falsche Structure) – e4c5

Antwort

0

Versuchen Sie diese Lösung.

Schritt 1: ein neues Array schaffen, die Ihre ähnlichen Bedingungen gespeichert

var conditions = []; 

var queryString = ["%do%","%b"]; 

Schritt 2: Schleife Ihre querystring Werte

for(var x in queryString) { 
    // do something 
} 

Schritt 3: Looping nur anhängen Ihr $like Zustand

conditions.push({ 
    items: { 
     $like: queryString[x] 
    } 
}); 

So würde Ihr Array wie folgt

[{ 
    items: { 
     $like: "%do%" 
    } 
},{ 
    items: { 
     $like: "%b" 
    } 
}] 

So Ihre sequelize Abfrage wie diese

var conditions = []; 
var queryString = ["%do%","%b"]; 

for(var x in queryString) { 
    conditions.push({ 
     items: { 
      $like: queryString[x] 
     } 
    }); 
} 

Model.findAll({ 
    where: {or: conditions} 
}).then(function(array){ 
    // Do whatever here with array 
}) 
+0

Ich habe dies bereits versucht. Sie können ein Array nicht mit einem String-Iirc vergleichen. Danke für den Versuch! – Bryan

Verwandte Themen