2016-09-16 3 views
0

Sagen, ich habe diese 3 Dokumente in einer DocumentDB Sammlung:DocumentDB: SQL Spiel auszuwählen, auf optionales Element

[ 
    { 
     "name": "tiger", 
     "keywords": [ 
      "animal", 
      "cat", 
      "stripes" 
     ] 
    }, 
    { 
     "name": "cat" 
    }, 
    { 
     "keywords": [ 
      "panther", 
      "black" 
     ] 
    } 
] 

Wie würde ich eine einzelne SQL-Abfrage strukturieren alle Dokumente zurück, wo der ‚Name‘ übereinstimmt „cat "ODER ein" Schlüsselwort "stimmt mit" Katze "überein, wenn" Schlüsselwörter "und" Name "optionale Elemente im Dokument sind?

Antwort

1

Diese Abfrage:

SELECT * FROM Wurzel r WHERE r.name = 'Katze' OR ARRAY_CONTAINS (r.keywords, 'Katze')

+0

großen Werke. Wissen Sie, wie Sie die Abfrage so ändern, dass ARRAY_CONTAINS mit Teilzeichenfolgen übereinstimmt wie CONTAINS? Im Moment muss ARRAY_CONTAINS genau mit der Zeichenkette übereinstimmen. Zum Beispiel die Zeichenfolge "ca": SELECT * FROM Wurzel r WHERE CONTAINS (r.name, 'ca') ODER ARRAY_CONTAINS (r.keywords, 'ca') – Projectitis

+0

ARRAY_CONTAINS führt einen strikten Gleichheitsvergleich des Suchartikels mit jedem Element in das Array. Beachten Sie, dass das Suchelement von einem beliebigen Typ sein kann. Ein hier alternativer Ansatz ist SELECT VALUE r von der Wurzel r JOIN k IN r.keywords WHERE CONTAINS (r.name, 'ca') OR ENTHÄLT (k, 'ca') Bitte halten zu tun Beachten Sie, dass JOIN das Schlüsselwort-Array abflacht und die Ergebnismenge das Kreuzprodukt der Eingabedokumente mit jedem Element im Array ist. Zum Beispiel gibt diese Abfrage das zweite Dokument zweimal zurück, da r.name die Bedingung für beide Array-Elemente erfüllt. –

Verwandte Themen