通过 MongoAPI 对 Azure Cosmos DB 进行聚合查询时出现意外错误

Posted

技术标签:

【中文标题】通过 MongoAPI 对 Azure Cosmos DB 进行聚合查询时出现意外错误【英文标题】:Unexpected error with aggregate query to Azure Cosmos DB via MongoAPI 【发布时间】:2018-03-09 08:15:14 【问题描述】:

我注意到我的数据库上的聚合查询失败:

 
  "aggregate" : "visitors", 
  "pipeline" : [
      "$match" :  "project" : "E2E120AF-AC50-4969-9DA1-CFA1E31D7E17", "data.lastVisit" :  "$gt" : ISODate("2018-02-07T17:00:00Z")   ,
      "$group" :  "_id" :  "$hour" : "$data.lastVisit" , "count" :  "$sum" : 1   
   ]

我从MongoChef.Net client 应用程序都尝试了这个,结果我得到了unexpected error

 "_t" : "OKMongoResponse", "ok" : 0, "code" : 1, "errmsg" : "unexpected error occured while processing the request", "$err" : "unexpected error occured while processing the request"  

如果我使用其他日期表达式运算符,例如 $dayOfYear,它也会失败。如果我在没有任何日期表达式的情况下按data.lastVisit 进行分组,它就可以正常工作。当然,同样的查询在真正的 MongoDB 上也能顺利运行。

visitors 集合中的文档结构如下:

 
    "project" : "E2E120AF-AC50-4969-9DA1-CFA1E31D7E17", 
    "data" : 
        "defaultName" : true, 
        "name" : "...", 
        "geo" : 
            ...
        , 
        "firstVisit" : ISODate("2018-02-21T09:10:06.464+0000"), 
        "ip" : "....", 
        "lastVisit" : ISODate("2018-02-21T09:10:08.582+0000")
    , 
    "_id" : ObjectId("5a8d376ef72db1002b9c591a"), 
    "sockets" : [
    ], 
    "isBlacklisted" : false, 
    "online" : true

我认为这是 Cosmos DB 实现聚合管道的一个问题,因此任何解决方法和有关如何提交 Cosmos DB 问题的信息都会有所帮助

【问题讨论】:

【参考方案1】:

好的,我已经设法找到一种解决方法,即只需将字段添加到分组_id

 "$group" :  "_id" :  time:  "$hour" : "$data.lastVisit"  , "count" :  "$sum" : 1   

但错误仍然存​​在,这绝对是一个问题。

【讨论】:

以上是关于通过 MongoAPI 对 Azure Cosmos DB 进行聚合查询时出现意外错误的主要内容,如果未能解决你的问题,请参考以下文章

Azure Cosmos DB:将集合克隆到另一个数据库

无法加载文件或程序集“System.Net.Http.Formatting-Cosmo”

C++ 快速上手

拿下了!国内首个AI时尚杂志封面

拿下了!国内首个AI时尚杂志封面

通过 AzureServiceTokenProvider 对 CloudTableClient 进行 Azure 存储身份验证