Javascript 根据两个单独的字段查找文档的最新日期:月份和年份
我在mongoDB中有这样的文档:Javascript 根据两个单独的字段查找文档的最新日期:月份和年份,javascript,mongodb,date,Javascript,Mongodb,Date,我在mongoDB中有这样的文档: {username:String, paymentYear:Int, paymentMonth:Int} 我想找到用户名的最新文档,也就是说,最接近我们日期的日期。现在。实现这一目标的最佳方式是什么?我是否可以使用mongo的任何查询,或者我是否应该编写自己的代码 感谢使用MongoDB的$dateFromParts阶段聚合管道可以实现这一点 db.test.aggregate([ { "$addFields": {
{username:String, paymentYear:Int, paymentMonth:Int}
我想找到用户名的最新文档,也就是说,最接近我们日期的日期。现在。实现这一目标的最佳方式是什么?我是否可以使用mongo的任何查询,或者我是否应该编写自己的代码
感谢使用MongoDB的$dateFromParts阶段聚合管道可以实现这一点
db.test.aggregate([
{
"$addFields": {
"tempDate": {
"$dateFromParts": {
year : '$paymentYear',
month : '$paymentMonth',
}
}
}
},
{
"$sort": {"tempDate": -1} // Change from `-1` to `1` For Ascending Order
},
{
"$limit": 1 // Number of documents to be returned based on the sort order
},
])
Use可以在$project阶段而不是$addFields阶段根据您的需要实现此功能,以实现更好的优化
注意:这仅适用于MongoDB 3.6及以上版本
您可以使用聚合日期操作符构建日期字段year、month、day=1等,然后将其与date.now进行比较。在find方法中,您需要使用$expr运算符来使用$dateFromParts运算符进行匹配。我认为您缺少排序之前的匹配阶段,以便定义要搜索的最高日期。否则,只要为给定用户获取最新的文档排序id就足够了,前提是id的生成由数据库完成。感谢您指出这一点。我忘了在$sort管道之前添加$match阶段