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)
有人尝试过吗?
您要在robomongo中输入吗?看起来像它!如果是这样,它将无法正常工作。阅读有关使用MongoDB更新嵌套数组的说明,我说这不适用于“旧壳”或基于它的任何东西(robomongo是基于壳的构建),因为当前实现了壳帮助器方法的方式:
注意有些讽刺意味的是,由于这是在for
.update()和类似方法的“ options”参数中指定的,因此该语法通常与所有最新发行版驱动程序兼容。但是,对于
mongo外壳来说,情况并非如此,因为在那里实现该方法的方式(“具有讽刺意味的是向后兼容”),该arrayFilters参数不能被内部方法识别和删除,该内部方法解析这些选项以实现与先前版本的“向后兼容性” MongoDB服务器版本和“旧版”.update()API调用语法。因此,如果要在
mongoShell或其他“基于Shell的”产品(尤其是Robo 3T)中使用该命令,则需要从开发分支或生产版本开始的3.6或更高版本。
因此,如果您想“与”候选版本一起“玩”,请使用该mongo版本的捆绑外壳或通过任何标准驱动程序运行代码。
| 归档时间: |
|
| 查看次数: |
3451 次 |
| 最近记录: |