如果Mongodb触发器中有出生日期(dob_date)字段,我只添加年龄字段?

问题描述 投票:0回答:1

此触发器自动添加一个值为 null 的年龄字段。我想知道如何添加一个条件,如果存在 dob_date 字段和值,它只会添加具有正确值的年龄字段。

exports = function() {
  const collection = context.services.get("Cluster0").db("app-data").collection("users")
  const doc = collection.updateMany(
    {},
    [{
      $set: {
        age:  { $dateDiff: 
                { startDate: 
                  { $dateFromString: 
                    {
                       dateString:"$dob_date"
                    }
                  }
                    , endDate: "$$NOW", unit: "year" 
                }
              } 
            } 
    }]
  )
  return doc;
}
mongodb
1个回答
0
投票

您可以通过

dob_date
运算符或
$type
运算符使用值过滤和更新包含
$exists
字段的文档。

参考:查询空或缺失字段

const doc = collection.updateMany({
  $expr: {
    $not: {
      $in: [
        {
          $type: "$dob_date"
        },
        [
          "missing",
          "null"
        ]
      ]
    }
  }
},
[
  {
    $set: {
      age: {
        $dateDiff: {
          startDate: {
            $dateFromString: {
              dateString: "$dob_date"
            }
          },
          endDate: "$$NOW",
          unit: "year"
        }
      }
    }
  }
])

演示@Mongo Playground

© www.soinside.com 2019 - 2024. All rights reserved.