我有一个文件,看起来基本上是这样的: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结果。我怎样才能最好地查询与过滤器数组的大量结果?
谢谢。