我有存储在cosmos db中的文件,我有多个文件用于相同的“stationkey”(分区键),在这个例子中,stationkey“ABC”有多个文件,“yymm”有“2018-02”& “2018-01”e.t.c,
我正在尝试的查询是获得所有“avg”&对于给定的stationkey和yymm过滤器组合,“dd”字段和“yymm”
我正在尝试使用C#进行查询,我试图获得“avg”,“dd”& “data”数组中的“yymm”字段,我写的查询给出了整个“数据”数组。
var weatherQuery = this.docClient.CreateDocumentQuery<WeatherStation>(docUri, queryOptions)
.Where(wq => wq.stationName == stationKey && lstYearMonthFilter.Contains(wq.yearMonth))
.Select(s => s.data);
从文档数组中查询特定字段的最佳方法是什么?
答案 0 :(得分:1)
所以你得到s =&gt;中的数据s.data。要从阵列中仅获得平均值,您必须执行另一个投影,如下所示:
.Select (s => s.data.Select ( a => a.avg ))
修改我的答案,因为你说你找不到&#39;选择&#39;关于&#39;数据&#39;。
定义一个MyDocument类:
public class Datum
{
[JsonProperty("dd")]
public string dd;
[JsonProperty("max")]
public int max;
[JsonProperty("min")]
public int min;
[JsonProperty("avg")]
public int avg;
}
public class MyDocument : Document
{
[JsonProperty("id")]
public string id;
[JsonProperty("data")]
public Datum[] data;
}
相应地修改您的代码
IDocumentQuery<MyDocument> query = client.CreateDocumentQuery<MyDocument>(UriFactory.CreateDocumentCollectionUri(_database, _collection),
new FeedOptions { MaxItemCount = -1, EnableCrossPartitionQuery = true, MaxDegreeOfParallelism = 199, MaxBufferedItemCount = 100000})
.Where(predicate)
.AsDocumentQuery();
while (query.HasMoreResults)
{
FeedResponse<MyDocument> feedResponse = await query.ExecuteNextAsync<MyDocument>();
Console.WriteLine (feedResponse.Select(x => x.data.Select(y => y.avg)));
}
HTH
答案 1 :(得分:1)
您可以使用双嵌套匿名类从数组项中仅选择特定字段 - 请参阅下面更改的SelectMany。这将返回每个Datum的yymm,因此可能没有选择整个数组那么高效 - 在两种情况下都可以测量RU / s。
Dim t As String
t = "T0"
cnt = 4
For n = 1 To 23
ActiveSheet.Range("$A$1:$P$1000000").AutoFilter Field:=2, Criteria1:= _
">=" & FromTime & t & n & ":00", Operator:=xlAnd, Criteria2:=" <= " & FromTime & t & n & ":30"
Next n