MongoDB 4.0:从数组首元素提取字段更新嵌套文档
MongoDB 4.0 新增ownershipClientCode字段解决方案
场景1:查询时临时展示新增字段
如果仅需要在查询结果中添加ownership.ownershipClientCode字段,无需修改原文档,可通过聚合查询直接提取目标值:
db.client.aggregate([ { $addFields: { "ownership.ownershipClientCode": { $arrayElemAt: ["$clientIds.clientClusterCode", 0] } } } ])
原理:$clientIds.clientClusterCode会自动提取数组clientIds中每个元素的clientClusterCode值,形成一个新数组,再通过$arrayElemAt取该数组的第一个元素,即为所需值。
场景2:永久更新集合中的文档
由于MongoDB 4.0不支持在update操作中直接使用聚合管道,需通过遍历文档逐个更新:
db.client.find().forEach(function(doc) { // 先判断clientIds数组存在且非空,避免空指针报错 if (doc.clientIds && doc.clientIds.length > 0) { const targetCode = doc.clientIds[0].clientClusterCode; db.client.updateOne( { _id: doc._id }, { $set: { "ownership.ownershipClientCode": targetCode } } ); } })
执行此脚本前建议先在测试环境验证,确保逻辑符合预期。
内容的提问来源于stack exchange,提问作者rennajihi
相关产品推荐
相关产品推荐

