我有一個文件,看起來基本上是這樣的:DocumentDB由濾鏡陣列陣列
{
"Name": "John Smith",
"Value": "SomethingIneed",
"Tags: ["Tag1" ,"Tag2", "Tag3"]
}
我的目標是編寫一個查詢,我發現在我的數據庫,其Tag
屬性包含的所有文件所有的標籤在過濾器中。
例如,在上述情況下,我的查詢可能是["Tag1", "Tag3"]
。我想要所有標籤集合都包含Tag1和Tag3的文檔。
我也做了以下內容:
嘗試過的所有包含類型LINQ查詢
var tags = new List<string>() {"Test", "TestAccount"}; var req = Client.CreateDocumentQuery<Contact>(UriFactory.CreateDocumentCollectionUri("db", "collection")) .Where(x => x.Tags.All(y => tags.Contains(y))) .ToList();
創建了一個用戶定義的函數(我不能讓這個在所有的工作)
var tagString =''Test','TestAccount'「;
var req = Client.CreateDocumentQuery<Contact>(UriFactory.CreateDocumentCollectionUri("db", "collection"), $"Select c.Name, c.Email, c.id from c WHERE udf.containsAll([${tagString}] , c.Tags)").ToList();
與containsAll定義爲:
function arrayContainsAnotherArray(needle, haystack){
for(var i = 0; i < needle.length; i++){
if(haystack.indexOf(needle[i]) === -1)
return false;
}
return true;
}
使用System.Linq.Dynamic從字符串創建謂詞
var query = new StringBuilder("ItemType = \"MyType\""); if (search.CollectionValues.Any()) { foreach (var searchCollectionValue in search.CollectionValues) { query.Append($" and Collection.Contains(\"{searchCollectionValue}\")"); } }
3實際上爲我工作,但是這個查詢非常昂貴(在10K文檔的集合上超過2000個RU),並且我瘋狂地被扼殺。我的應用程序第一次迭代的結果集必須能夠在結果集中支持10K結果。我怎樣才能最好地查詢與過濾器數組的大量結果?
謝謝。