如何解决如何从存储在mongodb中的对象获取日期?
我正在创建一个包含聊天和帖子的应用程序,并且在聊天中,我想显示最近发布的时间。 下面是我的猫鼬模式的日期部分,以及我的Mongodb日期字段的外观图片。
我试图将日期显示在前端,但是不确定如何设置日期格式。我想将其格式设置为昨天晚上12:45或6天之前,依此类推。 非常感谢您的帮助。
Mongoose Schema field for date:
date: {
type: Date,default: Date.now
}
解决方法
Mongo(世界上几乎没有其他数据库?)存储诸如“昨天”或“上周”之类的常量。
“昨天”这些概念的问题在于它的语义。如果是昨天2分钟前的00:01?如果答案是肯定的,那么实际上您将不得不每分钟更新数据库,如果您愿意妥协以查看时差,那么您仍然每天都必须这样做。
我不确定您的实际业务需求是什么使您想要这样做。但是我建议您在获取文档时这样做。否则这是不可扩展的。
以下是有关如何执行此操作的快速示例:
db.collection.aggregate([
{
"$addFields": {
currDay: {
"$dayOfMonth": "$$NOW"
},dateDay: {
"$dayOfMonth": "$date"
},dayGap: {
"$divide": [
{
"$subtract": [
"$$NOW","$date"
]
},86400000/**miliseconds in a day*/
]
}
}
},{
$addFields: {
date: {
"$switch": {
"branches": [
{
"case": {
$and: [
{
$lt: [
"$dayGap",1
]
},{
$eq: [
"$dateDay","$currDay"
]
}
]
},"then": "today"
},{
"case": {
$lt: [
"$dayGap",2
]
},"then": "yesterday"
},1
]
},"then": "today"
}
],default: {
"$concat": [
{
"$toString": {
"$round": "$dayGap"
}
}," days ago"
]
}
}
}
}
}
],{
allowDiskUse: true
})
如您所见,您将必须为每个选项手动构建所需的“短语”。您显然可以在代码中做同样的事情,因为我觉得更复杂。我只是选择显示“ Mongoi”方式。
如果最终选择提前更新数据库,则可以使用与$out结合使用的同一管道来实现此目的。
最后一点要注意的是,由于这种汇总仅关注毫秒差异(除today
字段之外),我有点作弊。表示如果是凌晨1点,则是50小时前。即使日期是三天前,仍然会显示在两天前。
我希望该示例向您展示为什么不在任何地方使用这种格式及其带来的困难。请注意,我什至没有提起“昨天”之类的时区概念,对于不同地区而言甚至更具语义。
在我的选择中,唯一可行的“真实”解决方案是构建一个自定义函数,以在代码中执行此操作。请注意,这并不是很有趣,因为您必须考虑间隔时间,时区,地理区域等事件,但这是可行的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。