我在保存时收到以下错误, "未知修饰符:$pushAll。预期有效的更新修饰符或管道样式更新指定为数组" 我问专家,他们建议降级MongoDB的版本。 我当前的版本是v4.2,需要更改为v3.4。
我尝试了以下命令,但出现错误。
db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
错误:
{
"ok" : 0,
"errmsg" : "Invalid command argument. Expected '4.2' or '4.0', found 3.6 in: { setFeatureCompatibilityVersion: "3.6", lsid: { id: UUID("b146274a-8229-4e16-aec6-bfd13bebca83") }, $db: "admin" }. See http://dochub.mongodb.org/core/4.0-feature-compatibility.",
"code" : 2,
"codeName" : "BadValue"
}
请帮我解决这个问题。
根据 MongoDB 3.6 关于$pushAll
的发行说明:
MongoDB 3.6删除了已弃用的$pushAll运算符。该运算符自 2.4 起已弃用。
不要使用 $pushAll,而是将 $push 运算符与 $each 修饰符一起使用。
引用的例子:
db.students.update(
{ name: "joe" },
{ $push: { scores: { $each: [ 90, 92, 85 ] } } }
)
也就是说,解决此问题的最佳方法是将代码中的$pushAll
替换为示例中的窗体。他们都做同样的事情,所以这是一个直接的替代品。
如果您无法修改代码,则它更复杂。不支持在多个主要版本之间降级。从 4.2.0 开始,您可以降级到 4.0,但不能降级到 3.4(落后 3 个主要版本(。
由于无法从 4.2.0 降级到 3.4,因此需要转储数据库的当前内容,安装 3.4,然后还原数据。话虽如此,降级以满足已删除的功能从来都不是一个好主意。
请注意,MongoDB 3.4 系列在 2020 年 1 月之后将不再受支持,因此安装 3.4 不是一个很好的长期解决方案。