2017-06-13 224 views
7

我正在尋找使用cosmosdb來存儲時間序列數據的document-centric design。使用官方的mongodb驅動程序,我嘗試寫一些簡單的聚合語句;但是,我收到錯誤,指出$ unwind和$ group不受支持。鑑於cosmosdb被吹捧爲對mongodb的一種直接替代,我錯過了一個步驟或者聚合不是支持的功能。Azure Cosmos DB-Mongo API支持彙總

retrieve.Aggregate().Unwind(i => i.Observations).Group(new BsonDocument { 
     {"_id", "$Observations.Success"}, 
     {"avg", new BsonDocument{ 
     {"$avg", "$Observations.Duration"} 
     }} 
    }).ToList(); 
+0

考慮到「底下」會發生什麼,從「驅動程序」發出的有線協議被「映射」到特定的CosmosDB方法,那麼這些特定的錯誤將表明它不被支持。一小段「搜索引擎fu」只顯示了最近添加的內容,允許「SQL聚合」,並且根本沒有任何文檔表明對MongoDB聚合有任何支持。因此,除非最近添加,否則沒有任何文件加上錯誤來加強案件意味着「否」。我認爲具體的錯誤實際上是這裏的具體事情。 –

+0

@NeilLunn我也懷疑這一點。叫我天真,但我希望我做錯了什麼。 – Tedford

+0

@Tedford - 現在支持聚合管道。查看我的相關答案(連同發佈的支持功能列表的鏈接)。 –

回答

2

截至11月2017,宇宙DB的MongoDB的API現在支持聚合管道,包括所有在你原來確定的管線級問題($unwind,$group)。

支持功能的細節列表here

7

鑑於從@neillunn註釋和缺乏對影響是似乎對cosmosdb聚合功能不通過蒙戈API支持的任何文件。看起來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");