MongoDB 年龄组按生日日期聚合

克里斯·K

我有这样的 MongoDB 文档:

{
    _id: {"$oid":"object_id"},
    email: "[email protected]"
    password: "password_hash"
    info: {
        birthday: "1993-03-12"
        ...
    }
    ...
}

而我无法改变它。我需要创建 Mongo 查询以按年龄(0-18 岁和 18 岁以上)对用户进行分组。我不知道怎么处理。我只创建了从生日日期(字符串)返回年份的查询:

db.users.aggregate(
    [
        {
            $project: {
                year: { $year: { date: { $dateFromString: { dateString: "$info.birthday", format: "%Y-%m-%d" } } } }
            }
        }
    ]
)

但我不确定我应该怎么做。

沃恩弗里德·多姆沙伊特

您可以通过此投影获得年龄:

db.collection.aggregate([
   {
      $set: {
         birthday: {
            $dateFromString: {
               dateString: "$info.birthday",
               format: "%Y-%m-%d"
            }
         }
      }
   },
   {
      $set: {
         age: {
            $subtract: [
               { $subtract: [{ $year: "$$NOW" }, { $year: "$birthday" }] },
               { $cond: [{ $lt: [{ $dayOfYear: "$birthday" }, { $dayOfYear: "$$NOW" }] }, 0, 1] }
            ]
         }
      }
   }
])

蒙戈游乐场

或者,如果您更喜欢变量:

db.collection.aggregate([
   {
      $set: {
         age: {
            $let: {
               vars: {
                  birthday: { $dateFromString: { dateString: "$info.birthday", format: "%Y-%m-%d" } }
               },
               in: {
                  $subtract: [
                     { $subtract: [{ $year: "$$NOW" }, { $year:  "$$birthday" }] },
                     { $cond: [{ $lt: [{ $dayOfYear: "$$birthday" }, { $dayOfYear: "$$NOW" }] }, 0, 1] }
                  ]
               }
            }
         }
      }
   }
])

根据这个年龄,您可以过滤(即$match)或$group

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章