Mongodb 机器人世界可以';不使用阵列过滤器?

Mongodb 机器人世界可以';不使用阵列过滤器?,mongodb,mongodb-query,mongo-shell,robo3t,Mongodb,Mongodb Query,Mongo Shell,Robo3t,从“”开始的后续操作 RoboMongo似乎无法使用数组过滤器执行查询: 通过Mongo shell执行相同的查询时,如果发现: >db.collection.update({ …“结果.分数”:{ …“$exists”:真 ... } ... }, { …“$mul”:{ …“结果.$[结果]。分数:10 ... } ... }, { …“阵列过滤器”:[{ …“结果分数”:{ …“$exists”:真 ... } ... }], …“多重”:真的吗

从“”开始的后续操作

RoboMongo似乎无法使用数组过滤器执行查询:

通过Mongo shell执行相同的查询时,如果发现:

>db.collection.update({
…“结果.分数”:{
…“$exists”:真
...     }
... }, {
…“$mul”:{
…“结果.$[结果]。分数:10
...     }
... }, {
…“阵列过滤器”:[{
…“结果分数”:{
…“$exists”:真
...         }
...     }],
…“多重”:真的吗
... })
WriteResult({“nMatched”:1,“nUpserted”:0,“nModified”:1})
查看Mongo服务器中的日志记录,看起来查询传递正确,但仍然失败:

D命令[conn4]运行命令测试。$cmd{update:“collection”,更新:[{q:{results.score:{$exists:true},u:{$mul:{results.$[result]。score:10.0},multi:true,upsert:false}],顺序:true,$db:“test}
D-[conn4]用户断言:2:在路径“结果”中找不到标识符“结果”的数组筛选器。$[result]。分数“src\mongo\db\update\update\u driver.cpp 132”
D WRITE[conn4]在更新中捕获断言:BadValue:在路径“results”中找不到标识符“result”的数组筛选器。$[result].score'
我编写[conn4]更新测试。集合appName:“MongoDB Shell”命令:{q:{results.score:{$exists:true}},u:{$mul:{results.$[result]。score:10.0},multi:true,upsert:false}异常:在路径结果中找不到标识符“result”的数组筛选器。$[result]。score'代码:BadValue numields:0锁:{}4ms
D REPL[conn4]正在等待写入问题。OpTime:{ts:Timestamp(0,0),t:-1},写关注点:{w:1,wtimeout:0}
I COMMAND[conn4]COMMAND test.$cmd appName:“MongoDB Shell”COMMAND:update{update:“collection”,updates:[{q:{results.score:{$exists:true}},u:{$mul results.$[result].score:10.0},multi:true,upsert:false}],ordered:true,$db:“test}numields:0 reslen:183 locks:{}协议:op_命令7ms
D命令[conn4]运行命令测试。$cmd{getlasterror:1.0,w:1.0,$readPreference:{mode:“secondaryPreferred”},$db:“test”}
I命令[conn4]命令测试。$cmd appName:“MongoDB Shell”命令:getLastError{getLastError:1.0,w:1.0,$readPreference:{mode:“secondaryPreferred”},$db:“test”}numYields:0 reslen:169锁:{}协议:op_命令0ms
shell中的日志不同:

D命令[conn8]运行命令测试。$cmd{update:“collection”,顺序:true,$db:“test”}
D存储[conn8]名称空间UUIDCache:已注册名称空间测试。UUID为a5f7f2ef-a7e3-4189-a9c4-29fdb5a18db9的集合
D查询[conn8]只有一个计划可用;它将运行,但不会缓存。查询:{results.score:{$exists:true}}排序:{}投影:{},计划摘要:COLLSCAN
快照id 367的D存储[conn8]WT begin_事务
快照id 367的D存储[conn8]WT commit_事务
快照id 368的D存储[conn8]WT begin_事务
快照id 368的D存储[conn8]WT回滚\u事务
我编写[conn8]更新测试。集合appName:“MongoDB Shell”命令:{q:{results.score:{$exists:true}},u:{$mul:{results.$[result]。score:10.0},arrayFilters:[{result.score:{$exists:true}],multi:true,upsert:false}计划摘要:COLLSCAN keysinspected:0 docsExamined:1 nMatched:1 nModified:1 numields:0锁:{Global:{acquireCount:{r:1,w:1}},数据库:{acquireCount:{w:1}},集合:{acquireCount:{w:1}}}}3ms
D REPL[conn8]正在等待写入关注点。优化:{ts:Timestamp(0,0),t:-1},写入关注点:{w:1,wtimeout:0}
I命令[conn8]命令test.$cmd appName:“MongoDB Shell”命令:update{update:“collection”,ordered:true,$db:“test”}numYields:0 reslen:44锁:{Global:{acquireCount:{r:1,w:1},数据库:{acquireCount:{w:1},集合:{acquireCount w:1}}协议:op\u msg 4ms
D命令[conn8]运行命令测试。$cmd{isMaster:1.0,forShell:1.0,$db:“test”}
D网络[conn8]启动服务器端压缩协商
客户端未请求D网络[conn8]压缩协商
I COMMAND[conn8]COMMAND test.$cmd appName:“MongoDB Shell”命令:isMaster{isMaster:1.0,forShell:1.0,$db:“test”}numields:0 reslen:208锁:{}协议:op_msg 1ms
我看不出有什么东西暗示出什么问题(当然除了断言失败)

  • Mongo shell成功的地方是什么导致了RoboMongo的失败
  • 这些日志里有什么东西告诉我出了什么问题吗

robomongo是否支持3.6?仅支持3.6。4@Veeram谢谢(我实际上还没有检查过),我想知道问题出在哪里,与其他更新查询相比,这有什么特别之处?@Veeram我假设RoboMongo只会将查询提交到服务器。不,不是真的。不确定arrayFilters是否向后兼容。RoboMongo是基于shell的产品,但它在mongo shell上有自己的包装器和一些解析在发送查询之前发生。好像有一个。