Mongodb 3.6.0-rc3数组过滤器不起作用?

Sen*_*hic 2 arrays mongodb mongodb-query

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

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

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

有人尝试过吗?

Nei*_*unn 8

您要在robomongo中输入吗?看起来像它!如果是这样,它将无法正常工作。阅读有关使用MongoDB更新嵌套数组的说明,我说这不适用于“旧壳”或基于它的任何东西(robomongo是基于壳的构建),因为当前实现了壳帮助器方法的方式:

注意有些讽刺意味的是,由于这是在for .update()和类似方法的“ options”参数中指定的,因此该语法通常与所有最新发行版驱动程序兼容。

但是,对于mongo外壳来说,情况并非如此,因为在那里实现该方法的方式(“具有讽刺意味的是向后兼容”),该arrayFilters参数不能被内部方法识别和删除,该内部方法解析这些选项以实现与先前版本的“向后兼容性” MongoDB服务器版本和“旧版” .update()API调用语法。

因此,如果要在mongoShell或其他“基于Shell的”产品(尤其是Robo 3T)中使用该命令,则需要从开发分支或生产版本开始的3.6或更高版本。

因此,如果您想“与”候选版本一起“玩”,请使用该mongo版本的捆绑外壳或通过任何标准驱动程序运行代码。