date.now()在mongodb管道减法中总是返回相同的时间?

lx0bsm1f  于 2023-03-01  发布在  Go
关注(0)|答案(1)|浏览(120)

我负责nestjs的后台工作,我提供列表和posting detail view api来发布文章。 要暴露列表,需要通过计算上传时间和当前时间来提供已经过去了多少时间。对于这个计算,mongodb的管道中使用了减法。在详细视图api中,它被正确地提取出来,但是在暴露列表的api中,当前时间被计算为与第一次请求的时间相同,因此提取的值相同。但是,如果我关闭并打开服务器,当前时间会再次刷新,但在第一次请求后仍是相同的。
我听说www.example.com()继续使用服务器启动时创建的对象,所以我尝试了新的Date()和Date.now,但仍然不起作用。Date.now() continues to use the object created when the server started, so I tried new Date() and Date.now, but it still doesn't work.
错误管道如下

export const GetRecentVideoListPipeLine = [
    {
        '$project': {
            '_id': 1,
            'nickName': 1,
            'thumbNailPath': 1,
            'title': 1,
            'tags': 1,
            'likeCount': 1,
            'uploadedAt': {
                '$subtract': [
                    Date.now(),
                    '$uploadedAt'
                ]
            },
        }
    },
    { '$sort': { 'uploadedAt': 1 } }
];

但是,这个很好用

export const GetVideoDetailPipeLine = (videoId: string) => {
    return [
        { '$match': { '_id': new ObjectId(videoId) }},
        { '$project': {
            '_id': 1,
            'nickName': 1,
            'title': 1,
            'tags': 1,
            'likeCount': 1,
            'videoPath': 1,
            'uploadedAt': {
                '$subtract': [
                    Date.now(),
                    '$uploadedAt'
                ]
            }
        }}
    ]
}

有什么问题吗?

db2dz4w8

db2dz4w81#

在第一个代码片段中,你有一个常量对象,它在代码开始时被求值,然后被重用而不需要重新求值;在第二个代码片段中,你有一个方法,它在方法的调用时被求值,这意味着值在每次调用时都被重新求值。

const now = Date.now()
console.log(now)
console.log(now)
console.log(now)

对比

const now = () => Date.now()
console.log(now())
console.log(now())
console.log(now())

第一组now是静态的,仅在每次运行脚本时更改。第二组now是动态的,不仅在每次运行脚本时更改,而且在每次执行函数时更改

相关问题