如何根据mongodb中的两个字符串fild“day”和“month”查找谁的生日

How to find who has birthday based on two string filds "day" and "month" in mongodb

提问人:podeig 提问时间:11/18/2023 更新时间:11/18/2023 访问量:38

问:

我在mongoDB中有这个数据模型:

{
    "_id" : "KPu78LNXYKfraRF94",
    ...
    "aboutPage" : {
        ...
        "birthDay" : NumberInt(27),
        "birthMonth" : NumberInt(5)
    }
}

我想找到明天过生日的所有用户。 是否可以从“birthDay”和“birthMonth”生成DateTime字段并查找文档?年份根本不重要,我没有关于它的数据。 谢谢:)

enter image description here

mongodb mongodb查询

评论

0赞 Wernfried Domscheit 11/18/2023
看一看$dateFromParts:mongodb.com/docs/manual/reference/operator/aggregation/...
0赞 cmgchess 11/18/2023
mongoplayground.net/p/N3gOviBxk9Jmongoplayground.net/p/bLG0ONs5sh3
0赞 Joe 11/18/2023
真的有必要转换为该测试的日期吗?如果您要查找生日是特定日期的人,则对这两个字段进行相等性测试就足够了,并且将由索引提供服务。

答:

1赞 ray 11/18/2023 #1

使用 在当前年份的适当日期对象中重建出生日期。然后,计算天数的差异,并得到从现在起 -1 天的出生日期(即出生日期是明天)$dateFromParts$dateDiff

db.collection.aggregate([
  {
    $set: {
      birthDate: {
        "$dateFromParts": {
          "year": {
            "$year": "$$NOW"
          },
          "month": "$aboutPage.birthMonth",
          "day": "$aboutPage.birthDay"
        }
      }
    }
  },
  {
    "$set": {
      "daysFromToday": {
        "$dateDiff": {
          startDate: "$birthDate",
          endDate: "$$NOW",
          unit: "day"
        }
      }
    }
  },
  {
    "$match": {
      daysFromToday: {
        $gte: -1,
        $lt: 3
      }
    }
  },
  {
    "$unset": [
      "daysFromToday",
      "birthDate"
    ]
  }
])

蒙戈游乐场

评论

0赞 podeig 11/18/2023
看起来这就是我需要的。谢谢!只有一件事:我得到的生日恰好是 -1(天数)天,但如果我想进入这个时期(今天 - 出生日 <= 今天< 3 天),有可能吗?
0赞 ray 11/18/2023
@podeig更新了答案以在时间段内选择
0赞 podeig 11/20/2023
好!我工作正常!感谢您的帮助!有好的一天!:-)