MongoDB技术问询:意大利队球员caps提额与特定球员查询需求
MongoDB 数据操作解决方案
嘿,针对你给出的MongoDB球队集合数据,我整理了这两个操作的具体实现方法,一起来看看:
a) 仅为意大利球队的球员将caps字段值提升10%
首先明确,意大利球队对应的联赛是Serie A,我们需要批量更新这些球队下所有球员的caps字段,让它增加10%(即原值乘以1.1)。这里用updateMany结合数组通配符$[]和乘法操作符$mul就能实现:
db.teams.updateMany( { league: "Serie A" }, // 匹配意大利联赛的球队 { $mul: { "players.$[].caps": 1.1 } } // 对数组中所有球员的caps字段乘以1.1 )
$[]作为数组通配符,会匹配文档中players数组的所有元素,刚好满足给意大利球队全体球员提升caps的需求。
b) 查询所有年龄超过30岁且球员ID(p_id)包含字符串“es”的球员
要精准筛选符合条件的球员,用聚合管道处理会更灵活:先展开players数组,再匹配条件,最后按需返回字段:
db.teams.aggregate([ { $unwind: "$players" }, // 展开players数组,每个球员成为独立文档 { $match: { "players.age": { $gt: 30 }, // 匹配年龄超过30岁的球员 "players.p_id": { $regex: "es", $options: "i" } // 匹配p_id包含"es"的球员,忽略大小写 } }, { $project: { _id: 0, team_name: "$name", player: "$players" } } // 返回球队名称和球员信息,屏蔽默认_id ])
如果不需要显示球队信息,把$project调整为{ $project: { _id: 0, player: "$players" } }即可。
内容的提问来源于stack exchange,提问作者user6522753
相关产品推荐
相关产品推荐

