2016-09-16 90 views
0

說我有一個DocumentDB集合這3個文件:DocumentDB:SQL來選擇可選元素匹配

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

我將如何構建一個SQL查詢返回在「名稱」匹配所有文件「貓「關鍵字」和「名稱」是文檔中的可選元素時,「OR關鍵字」是否與「貓」匹配?

回答

1

嘗試此查詢:

SELECT * FROM 底部R WHERE r.name = '貓' OR ARRAY_CONTAINS(r.keywords, '貓')

+0

的偉大工程。你知道如何修改查詢,使ARRAY_CONTAINS與CONTAINS一樣匹配部分字符串嗎?目前ARRAY_CONTAINS必須完全匹配字符串。例如,字符串「ca」:SELECT * FROM root r WHERE CONTAINS(r.name,'ca')OR ARRAY_CONTAINS(r.keywords,'ca') – Projectitis

+0

ARRAY_CONTAINS執行嚴格的等式比較,陣列。請注意,搜索項可以是任何類型。 這裏的另一種方法是做 SELECT值R 從底部R 加盟K的r.keywords WHERE CONTAINS(r.name, 'CA'),或包含(K, 'CA') 請保持在請注意,JOIN將使關鍵字數組變平,並且結果集是輸入文檔與數組中每個項目的叉積。 例如,由於r.name滿足兩個數組項的條件,所以此查詢將返回第二個文檔兩次。 –