mongodb - 对于在普通 mongo 服务器中成功执行的特定查询,带有 Mongo API 的 CosmosDB 失败的原因是什么?
问题描述
我计划将我所有的 mongoDb 数据库迁移到 azure cosmosDB。出于测试目的,我试图通过使用 mongo API 作为底层数据源制作 azure cosmosDB 来测试所有查询。我能够通过在 cosmosDB 中创建一些自定义索引(单字段/通配符)来执行所有查询。但是一个特定的查询失败了。我找不到任何明显的原因。查询如下所示(使用 $in 运算符,查询有点过长。我怀疑)
db.getCollection("rules").find({
"$and":[
{
"$or":[
{
"subRules.ALL.leftOperand":"GROUP",
"subRules.ALL.rightOperand":{
"$in":[
<4000+ values>
]
}
},
{
"subRules.ALL.leftOperand":"MACHINE",
"subRules.ALL.rightOperand":{
"$in":[
<4000+ values>
]
}
}
]
},
{
"ruleName":{
"$regex":""
}
}
],
"subRules.ANY.leftOperand":{
"$ne":"COFFEE_AMOUNT"
}
})
这个确切的查询适用于 mongo 服务器。但是当我在天蓝色的宇宙中运行它时。我收到以下错误
error: {
"ok" : 0,
"errmsg" : "Error=2, Details='Response status code does not indicate success: BadRequest (400); Substatus: 0; ActivityId: 443df8b1-136f-4018-9d77-63b3442ab7f8; Reason: (Response status code does not indicate success: BadRequest (400); Substatus: 0; ActivityId: 443df8b1-136f-4018-9d77-63b3442ab7f8; Reason: (Response status code does not indicate success: BadRequest (400); Substatus: 0; ActivityId: 443df8b1-136f-4018-9d77-63b3442ab7f8; Reason: (Message: ��errors�ꠈseverity�Error�location�\u000e�start\u0000�end�5\u0002�code�SC3031�message~pTt\u00194�2A�zY�\u0007���r�\\&���2�\u001dƧ��6�]o��r��\f�6�E{�\rz���0�-���a:\u001a�.��t4�\u001c���av�=.�@Tt\u0019\u0014f���2\u0019�N��tPz\u000e��\\\r\nActivityId: 443df8b1-136f-4018-9d77-63b3442ab7f8, Request URI: /apps/27c904fe-36bc-4acd-b55d-2c8494082ce7/services/c88f5dcc-2b90-4935-9281-38171d9dd72a/partitions/398285ee-29c1-4564-8e79-91c184ef65dd/replicas/132769491079094442s/, RequestStats: Microsoft.Azure.Cosmos.Tracing.TraceData.ClientSideRequestStatisticsTraceDatum, SDK: Windows/10.0.17763 cosmos-netstandard-sdk/3.18.0);););",
"code" : 2,
"codeName" : "BadValue"
}
我尝试在特定集合上创建通配符索引。仍然失败。
注意:当 $in 运算符的数组中的值很少时,查询也可以在 cosmosDB 中成功执行!!
如果有人能对这个问题有所了解,将不胜感激。谢谢
解决方案
我认为此时您已经获得了解决方法,但是以防万一,您正在将正确版本的 mongodb 与 cosmos 进行比较?请记住,cosmos 是 4 或更少,mongodb 实际上是 v5。无论如何,具有大量要比较的值的“$IN”子句可能是一个瓶颈,无论是 SQL 还是非 SQL,您是否尝试过让您的“IN”列表成为可查找的集合?这可能适用于宇宙
推荐阅读
- docker - docker image 导致容器具有不同的 tensorflow 版本
- c# - 为什么我会收到 System.TypeInitializationException 以及如何修复它?
- python - 在Django中制作api而不制作模型和视图
- jquery - 如何在列表项jquery中显示第n个类型2的块
- django - 在处理请求之前将 POST 参数移动到查询参数
- c# - 如何使用 NumPad 在 WPF C# 中导航列表视图
- excel - Excel VBA 运行时错误“1004”无法识别解决方案
- reactjs - 即使删除 node_modules,React 应用程序生产构建仍然太大
- php - Symfony Querybuilder 左连接合并数组
- elm - Elm Http.post 需要产生 Http.Request Int 但 send 需要 Http.Request String