如何通过不早于...的时间戳选择数据(必须在服务器端读取时间戳)

时间:2016-05-19 12:16:32

标签: c# mongodb mongodb-query

我需要分别选择一个文件我必须使用条件来检查存在。在SQL中我应该写下面的查询:

SELECT * 
FROM dummy
WHERE
  timestamp >= CURRENT_TIMESTAMP - 300

表达式CURRENT_TIMESTAMP - 300应该被读作“当前服务器时间戳减5分钟”而不管使用的SQL服务器(语法不同)。

要实现这一点,我需要使用服务器时间戳。原因很明显 - 我无法信任客户的日期/时间设置。

我可以从客户端读取当前服务器时间戳并再次使用它来构建过滤器,但更舒适和认真的是构建一个能够直接访问服务器时间戳的过滤器。

我目前正在使用此过滤器:

FilterDefinition<BsonDocument> filter = new BsonDocument()
{
    { "$or", new BsonArray()
    {
        new BsonDocument() { { "processing_started", new BsonDocument() { { "$exists", false } } } },
        new BsonDocument() { { "processing_started", BsonNull.Value } },
        new BsonDocument()
        {
            { "$and", new BsonArray()
            {
                new BsonDocument() { { "processing_status", "started" } },
                new BsonDocument() { { "processing_started", new BsonDocument() { { "$lte", new BsonDocument() { { "$subtract", new BsonArray() { "new Date()", ProcessingTimeout * 1000 } } } } } } }
            }
            }
        }
    }
    }
};

但是我不确定是否在服务器端或客户端上评估了"new Date()"表达式。

1 个答案:

答案 0 :(得分:-1)

你起飞的300天是1天,1天。这样做的最简单方法可能就是将分钟数除以24而不是60。

(CURRENT_TIMESTAMP - (5.0 / 24.0 / 60.0))

是的,但是你对服务器时间的评论。如果它是在客户端机器上运行的应用程序,它将是客户端时间,但如果代码是SQL,则它将是服务器时间。