查询CosmosDB时处理此请求时发生未知服务器错误

时间:2018-11-05 23:04:59

标签: mongodb-query azure-cosmosdb azure-cosmosdb-mongoapi

我尝试了以下查询,但由于某种原因,我得到了Unknown server error occurred when processing this request。我对mongodb有点陌生,但是在阅读Mongodb shell和CosmosDB的文档时,列出的所有运算符似乎都受支持,并且从语法上看这是正确的。

db.getCollection('transactions').aggregate(
    [
        {
            $match:{
                bdr_date: 20181031, 
                make: { $exists: false }, 
                shard_key: '1249_2018-10', 
                time: { $gt: 2344 }
            }
        },
        {
            $group: { 
                total_sales: { 
                    $sum: { 
                        $multiply: [
                            "$sales",
                            "$units"
                        ]
                    }
                }
            }
        } 
    ]
)

我的CosmosDB使用MongoAPI并包含一个名为transactions的集合,其中包含具有许多密钥的文档,但是重要的是以下这些:

{
    "bdr_date" : INT(32),
    "time" : INT(32),
    "sales" : Double,
    "units" : INT(32),
    "shard_key" : String
}

在某些文档中,还有一个名为{ "make": INT(32) }的键,其中有一个填充数据漏洞的脚本。我只需要包含真实数据的文档,所以用"make"键过滤掉了文档。 bdr_date采用yyyymmdd格式,time采用HHMM格式。

除了未知的服务器错误异常外,错误代码并没有说太多,所以我很困惑自己到底在做什么。我缺少一些简单的东西吗?

如果您需要更多信息,我会尽力提供。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在将电子邮件发送到AskCosmosDB@microsoft.com之后,显然存在一些将在以后修复的错误,当前使Cosmos返回错误的错误消息。

就我而言,它最终变得简单。我只是忘了将_id键放到$group运算符中了。就我而言,让_id: null解决了这个问题。

db.getCollection('transactions').aggregate(
    [
        {
            $match:{
                bdr_date: 20181031, 
                make: { $exists: false }, 
                shard_key: '1249_2018-10', 
                time: { $gt: 2344 }
            }
        },
        {
            $group: { 
                _id: null,
                total_sales: { 
                    $sum: { 
                        $multiply: [
                            "$sales",
                            "$units"
                        ]
                    }
                }
            }
        } 
    ]
)