私はこのように、本質的に見える文書を持っている: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 query = new StringBuilder("ItemType = \"MyType\""); if (search.CollectionValues.Any()) { foreach (var searchCollectionValue in search.CollectionValues) { query.Append($" and Collection.Contains(\"{searchCollectionValue}\")"); } }
から述語を作成するための
使用System.Linq.Dynamic:
のように定義のcontainsAllと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();
function arrayContainsAnotherArray(needle, haystack){
for(var i = 0; i < needle.length; i++){
if(haystack.indexOf(needle[i]) === -1)
return false;
}
return true;
}
<オール開始= "3">
3実際に私のために働いた、クエリは非常に高価でした(10Kドキュメントのコレクションで2000以上のRU)、私は狂ったように絞られています。私のアプリケーションの最初の反復の結果セットは、結果セットで10Kの結果をサポートできる必要があります。フィルタの配列を使用して多数の結果を最適に照会するにはどうすればよいですか?
ありがとうございました。