Azure Cosmos DB - Mongo API是否支持聚合

Ted*_*ord 8 c# mongodb mongodb-.net-driver azure-cosmosdb

我希望使用cosmosdb来存储以文档为中心的设计中布置的时间序列数据.使用官方的mongodb驱动程序,我试着写一些简单的聚合语句; 但是,我收到的错误表明$ unwind和$ group不受支持.鉴于cosmosdb被吹捧为mongodb的替代品,我错过了一个步骤,或者聚合不是支持的功能.

retrieve.Aggregate().Unwind(i => i.Observations).Group(new BsonDocument {
        {"_id", "$Observations.Success"},
        {"avg", new BsonDocument{
        {"$avg", "$Observations.Duration"}
        }}
    }).ToList();
Run Code Online (Sandbox Code Playgroud)

Ted*_*ord 8

鉴于来自@neillunn的评论以及缺乏任何关于该影响的文档似乎没有通过mongo API支持cosmosdb的聚合函数.看来,目的是使用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);
Run Code Online (Sandbox Code Playgroud)

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");
Run Code Online (Sandbox Code Playgroud)


Dav*_*gon 4

截至 2017 年 11 月,Cosmos DB 的 MongoDB API 现在支持聚合管道,包括原始问题 ( $unwind、$group) 中确定的所有管道阶段。

此处列出了支持的功能的具体信息。