Mongodb 3.6.0-rc3阵列过滤器不工作



我正试图在mongodb 3.6.0-rc3中使用数组过滤器,就像在doc示例中一样,但没有任何行受到影响,也没有错误。

示例被简化。我知道这可以用$作为位置运算符来完成,但我计划将此功能用于两级嵌套数组。

db.getCollection('books').update({},
{
$set: { "authors.$[element].firstName": "Joe" }
},
{
arrayFilters: [ { element: { "_id": ObjectId("some_id") } } ],
multi: true
})

有人试过这个吗?

你在robomongo中输入这个吗?它看起来像!如果是这样,那就行不通了。阅读我关于用MongoDB更新嵌套数组的说明,我说这在";较老的外壳";或者基于它的任何东西(robomongo是一个基于shell的构建),因为shell助手方法目前的实现方式:

注意有些讽刺的是,因为这是在";选项";.update()等方法的参数,语法通常与所有最新发布的驱动程序版本兼容。

然而,mongo外壳并非如此,因为该方法在那里的实现方式("具有讽刺意味的是,为了向后兼容性")arrayFilters自变量不被解析选项的内部方法识别和删除,以便传递"向后兼容性";向后兼容性";使用先前的MongoDB服务器版本和";"遗留";.update()API调用语法。

因此,如果您想在CCD_ 5 shell或其他";基于外壳的";产品(尤其是Robo 3T),您需要3.6或更高版本的开发部门或生产发布的最新版本。

所以如果你想;玩";作为候选版本,可以将捆绑的mongoshell与该版本一起使用,也可以简单地通过任何标准驱动程序运行代码。

db.getCollection('books').update({},
{
$set: { "authors.$[element].firstName": "Joe" }
},
{
arrayFilters: [ { "element._id": ObjectId("some_id") } ],
multi: true
})

这个BUG,只需将studio-3t版本升级到2018.6.1,使用$和arrayFilter就可以了。我在mongo4.0.4和studio-3t 中尝试过

最新更新