Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据两个单独的字段查找文档的最新日期:月份和年份_Javascript_Mongodb_Date - Fatal编程技术网

Javascript 根据两个单独的字段查找文档的最新日期:月份和年份

Javascript 根据两个单独的字段查找文档的最新日期:月份和年份,javascript,mongodb,date,Javascript,Mongodb,Date,我在mongoDB中有这样的文档: {username:String, paymentYear:Int, paymentMonth:Int} 我想找到用户名的最新文档,也就是说,最接近我们日期的日期。现在。实现这一目标的最佳方式是什么?我是否可以使用mongo的任何查询,或者我是否应该编写自己的代码 感谢使用MongoDB的$dateFromParts阶段聚合管道可以实现这一点 db.test.aggregate([ { "$addFields": {

我在mongoDB中有这样的文档:

{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阶段