我希望使用cosmosdb来存储document-centric design中列出的时间序列数据。使用官方的mongodb驱动程序,我试着写一些简单的聚合语句;但是,我收到的错误表明$ unwind和$ group不受支持。鉴于cosmosdb被吹捧为mongodb的替代品,我错过了一个步骤,或者聚合不是支持的功能。
retrieve.Aggregate().Unwind(i => i.Observations).Group(new BsonDocument {
{"_id", "$Observations.Success"},
{"avg", new BsonDocument{
{"$avg", "$Observations.Duration"}
}}
}).ToList();
答案 0 :(得分:8)
鉴于来自@neillunn的评论并且没有任何关于这种影响的文档似乎没有通过mongo API支持cosmosdb的聚合函数。看来intention是使用cosmosdb Documentdb API SQL语法进行聚合。
LINQ语法
var client = new DocumentClient(new Uri("https://<account>.documents.azure.com"),<password>);
// issue query
var documentUri = UriFactory.CreateDocumentCollectionUri("Prod", "retrieve");
var date = "20161011".Dump("Date");
var max = client.CreateDocumentQuery<ObservationDocument>(documentUri)
.Where(i => i.Id == date)
.SelectMany(i => i.observations)
.Max(i => i.Duration);
SQL语法
// explicit query
var spec = new SqlQuerySpec("select value count(o.duration) from days d join o in d.observations where d._id = @id");
spec.Parameters = new Microsoft.Azure.Documents.SqlParameterCollection();
spec.Parameters.Add(new Microsoft.Azure.Documents.SqlParameter("@id", "20161010"));
client.CreateDocumentQuery(UriFactory.CreateDocumentCollectionUri("Prod", "retrieve"), spec).Dump("As query");
答案 1 :(得分:2)
截至2017年11月,Cosmos DB的MongoDB API现在支持聚合管道,包括原始问题($unwind
,$group
)中确定的所有管道阶段。
列出here。
列出了受支持功能的细节