MongoDB中如何按双条件判断设置新增字段fl2的值为1或0
MongoDB实现方案
场景1:仅查询时返回带fl2字段的结果(不修改原数据)
使用聚合管道实现,代码如下:
db.collection.aggregate([ { $addFields: { data: { $map: { input: "$data", as: "item", in: { // 保留元素原有所有字段 $mergeObjects: [ "$$item", { fl2: { $cond: { if: { $and: [ { $lte: ["$$item.value", 100] }, { $eq: ["$$item.fl", 1] } ] }, then: 1, else: 0 } } } ] } } } } } ])
场景2:直接更新集合内原有文档(永久新增fl2字段)
MongoDB 4.2及以上版本支持聚合管道式更新,代码如下:
db.collection.updateMany( {}, // 匹配所有文档,可按需添加过滤条件缩小更新范围 [ { $addFields: { data: { $map: { input: "$data", as: "item", in: { $mergeObjects: [ "$$item", { fl2: { $cond: { if: { $and: [ { $lte: ["$$item.value", 100] }, { $eq: ["$$item.fl", 1] } ] }, then: 1, else: 0 } } } ] } } } } } ] )
逻辑说明
$map遍历data数组的每一个元素,对每个元素做单独处理$mergeObjects保留元素原有字段的同时,新增fl2字段$cond做条件判断,同时满足value ≤ 100和fl=1两个条件时返回1,否则返回0,完全匹配需求的判断逻辑
内容的提问来源于stack exchange,提问作者bc110402922
相关产品推荐
相关产品推荐

