我在Mongo收藏中有出生日期的文件清单。我们有一个前端,用户可以将复杂的条件添加到数据中,得到如下结果

(user.dob isToday AND user.score > 1000) OR (user.dob isTomorrow AND user.score > 2000)

除了日期类型,我还可以将上述条件转换为相应的mongo查询,如{"score" : { $gt: 1000}}
如果是生日条件,我们必须查询mongo中支持的带有月日和月日的db,这只能使用聚合,这对我的上述用例没有帮助。
有人有什么建议吗?思想?

最佳答案

您可以将聚合框架与$dayOfYear运算符一起使用。我假设出生日期存储在字段birthday中,并且有一个名为name的字段:

db.data.aggregate(
[
        {
                "$project" : {
                        "_id" : 0,
                        "name" : 1,
                        "birthday" : 1,
                        "score" : 1,
                        "todayDayOfYear" : {
                                "$dayOfYear" : new Date()
                        },
                        "birthDayOfYear" : {
                                "$dayOfYear" : "$birthday"
                        }
                }
        },
        {
                "$project" : {
                        "name" : 1,
                        "birthday" : 1,
                        "score" : 1,
                        "isBirthDay" : {
                                "$eq" : [
                                        "$todayDayOfYear",
                                        "$birthDayOfYear"
                                ]
                        }
                }
        },
        {
                "$match" : {
                        "isBirthDay" : true,
                        "score" : { $gt: 100}
                }
        }
]
)

关于mongodb - 如何在MongoDB中获取今天生日的用户列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34614042/

10-11 20:38