如何使用MongoDB通过传递日期范围,如未来60天即将到来的生日或过去60天的生日等获得今天,即将到来的和过去的生日
我们已经将用户的出生日期保存在用户集合中,格式如下json。
"dob" : {
"year" : "2015",
"month" : "06",
"day" : "30"
},
"birthday" : ISODate("1975-08-26T18:30:00.000Z") // Correct date format
基本上我的解决方案是在这里的正确答案,但不清楚如何使用我的收集数据集。
使用mongo查找在未来30天内是否有人过生日
谢谢!
在"users"集合中生日日期应按如下格式存储:
"birthday" : ISODate("1975-08-26T18:30:00.000Z")
var today = new Date();
var m1 = { "$match" : { "birthday" : { "$exists" : true, "$ne" : '' } } };
var p1 = {
"$project" : {
"_id" : 0,
"username" : 1,
"birthday" : 1,
"todayDayOfYear" : { "$dayOfYear" : today },
"dayOfYear" : { "$dayOfYear" : "$birthday" }
}
};
var p2 = {
"$project" : {
"username" : 1,
"birthday" : 1,
"daysTillBirthday" : { "$subtract" : [
{ "$add" : [
"$dayOfYear",
{ "$cond" : [{"$lt":["$dayOfYear","$todayDayOfYear"]},365,0 ] }
] },
"$todayDayOfYear"
] }
}
};
if ( showcase == 'today' ) {
var m2 = { "$match" : { "daysTillBirthday" : { "$lt" : 1 } } }; // lt:1 = Today Birthdays
} else if ( showcase == 'upcoming' ) {
var m2 = { "$match" : { "daysTillBirthday" : { "$lt" : 60 } } }; // lt:60 = Next 60 days Upcoming Birthdays
} else if ( showcase == 'past' ) {
var m2 = { "$match" : { "daysTillBirthday" : { "$gt" : 60 } } }; // gt = Past 60 days Birthdays
}
db.users.aggregate([m1, p1, p2, m2]);