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 上失败的原因。
我正在使用 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 上失败的原因。