mongodb - 更新 MongoDB 中数组中的嵌套对象
问题描述
我被困在我想创建的查询中。假设我在随机集合中有以下文档:
[
{
"name":"Max",
"cars":[
{
"company":"Ford",
"price":5000
},
{
"company":"BMW",
"price":7500
}
]
},
{
"name":"Josy",
"cars":[
{
"company":"Ford",
"price":3000
},
{
"company":"BMW",
"price":5500
}
]
}
]
在第一步中,我想将其他数据添加到我的 Array Cars 中,这对我来说很好:
db.user.updateMany(
{},
{$set:{"cars.$[].isPremium":false}}
)
但是现在我想将 isPremium 更新为 true 如果价格更高 3500
db.user.updateMany(
{cars : {$elemMatch:{price:{$gt:3500}}} },
{$set:{"cars.$[].isPremium":true}}
)
但这不起作用,因为价格为 3000 的乔西福特被设置为溢价,但价格不 > 3500。那么出了什么问题?
解决方案
解决方案 #1:在使用值初始化isPremium
字段后尝试以下查询:false
db.user.updateMany(
{
cars: { $elemMatch: { price: { $gt: 3500 } } }
},
{
$set: {
"cars.$[obj].isPremium": true
}
},
{
arrayFilters: [
{
"obj.price": { $gt: 3500 }
}
]
}
)
解决方案#2:不需要您的第一个更新查询(即,isPremium
用初始化false
)。
db.user.updateMany(
{
cars: { $elemMatch: { price: { $gt: 3500 } } }
},
{
$set: {
"cars.$[premium].isPremium": true,
"cars.$[nonPremium].isPremium": false
}
},
{
arrayFilters: [
{
"premium.price": { $gt: 3500 }
},
{
"nonPremium.price": { $lte: 3500 }
}
]
}
)
推荐阅读
- python-3.x - 将 Matlab 代码转换为 Python 时如何解决此错误
- java - 无法添加窗口 - 令牌 null 不适用于服务中的应用程序
- node.js - 按文档之间常见数组项的数量对 mongo 查找进行排序
- r - 在R图中分配大量(10-15)视觉上非常不同的颜色的最佳方法是什么(对于曲线 - 特别是CDP)
- python - 如何在 Python 中将文本字符串编码为数字?
- go - 字符串迭代编程
- c# - CreateDirectConversation/CreateDirectConversationAsync Bot Framework 4 中的 ArgumentNullException
- python - 在 Mayavi 中为单个补丁着色
- html - 制作简单的静态网站多语言的选项有哪些?
- excel-formula - 如果一个数字,则删除最后一个值,否则什么都不做