mongodb - $[](位置运算符)在猫鼬中不起作用
问题描述
$[] (positional-all)
在 mongodb 3.6 版中添加了更新运算符。但它在猫鼬中不起作用。
我想更新allTasks
特定用户的数组的所有元素,其paid : 0
要paid :1
我正在使用的查询是:
User.update({
_id: userId,
"allTasks.paid":0
},{
$set : {
"allTasks.$[].paid":1
}
})
用户模式
var UserSchema = mongoose.Schema({
allTasks: [{
paid: Number // 0: unpaid, 1: paid
//other fields
}],
//other fields
});
上面给出的查询不起作用,谁能告诉我,如果我遗漏了什么,或者做错了什么?
解决方案
对于面临同样问题的其他人:
问题是Mongodb
&mongoose
版本。
- MongoDB 版本应该是 3.6+
- Mongoose 版本需要 5.x 或更高
此外,您可能需要使用setFeatureCompatibilityVersion : 3.6
.
从这个答案:
当从较低版本切换到较高版本的 mongodb 时,您必须为您的 mongodb设置setFeatureCompatibilityVersion
启用或禁用保留与早期版本 MongoDB 不兼容的数据的功能。您只能针对 admin 数据库发出 setFeatureCompatibilityVersion。
您可以通过在 mongo shell 中运行此命令来简单地设置它
db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
推荐阅读
- spring-boot - How to run liquibase as a pre-install hook in Helm?
- python - How can I write a loop without being redundant?
- python - Converting C# to Python base64 encoding
- amazon-ec2 - attaching different Security Groups to different EC2s
- javascript - Custom element not picking up attributes
- android - ObservableCollection 已填充但不会显示在 android 显示中
- javascript - 初学者项目 - Reactjs
- reactjs - 为什么会出现firebase授权错误?
- c# - 调试器仅在 Mac 上不会启动 .netcore 应用程序。(但适用于 Windows)
- angular - VS Angular Web 应用程序是否应该包含 Web api?