我有这样的 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] 删除。
我来说两句