MongoDB 查询管道中 $round 的 Azure cosmos 抛出错误

Azure cosmos throwing error for $round in MongoDB query pipeline

我正在使用 Azure Cosmos MongoDB 并存储 API 请求日志。我想知道每秒发出多少请求。所以我在将时间戳除以 1000 然后以 0 位小数舍入后根据时间戳对它们进行分组

1593096483234 to 1593096483.234 to 1593096483

并对上述分组提供的文档进行计数,然后根据计数降序排序。

查询

db.server_api_logs.aggregate([
   {
      "$group": {
         "_id": "$timestamp"
      }
   },
   {
      "$project": {
         "summation": {
            "$round": {
               "$toDouble": {
                  "$divide": ["$_id",1000]
               }
            }
         }
      }
   },
   {
      "$group": {
         "_id": "$summation",
         "summer": {"$sum": 1}
      }
   },
   {
      "$sort": {"summer": -1}
   }
]

尝试 运行 以上查询时出现此错误

Unable to execute the selected commands

Mongo Server error (MongoCommandException): Command failed with error 168 (168): 'unknown operator: $round' on server <server address> 

The full response is:
{ 
    "ok" : 0.0, 
    "errmsg" : "unknown operator: $round", 
    "code" : NumberInt(168), 
    "codeName" : "168"
}

它在本地使用指南针时完全正常,但在 Cosmos 上使用 Robo3T 时就不行了。我做错了什么吗?

MongoDB documentation 所述,$round 运算符是在 MongoDB 的 4.2 版中引入的。

Azure Cosmos DB documentation 所述,目前,Azure Cosmos DB MongoDB 的 API 与 MongoDB 服务器版本 3.6 兼容。

这就是为什么您的查询在本地 MongoDB 实例(我相信是 4.2 或更新版本)上有效但在 Azure Cosmos DB 上失败的原因。