それぞれドキュメントを選択する必要があります。条件を使用して存在を確認する必要があります。 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()"
式は、サーバー側またはクライアント上で評価されている場合、私はわからない:
私は現在、このフィルタを使用しています。
フィルタはクライアントアプリケーション内で実行されるため、クライアントの時間が得られます。サーバ時間に直接アクセスするフィルタを構築する方法はありますか? –
SQLはサーバ時間になります。私のコメントに述べられている通り。 SQLを使用してチェックしているのはサーバー時間なので、SQLを使用して正しい方法で処理しています。このために何らかのサービスを書くのではなく、クライアントのアプリケーションをチェックする方法はありませんが、SQLを使用するとサーバーの時間を稼ぐことができます。 –
あなたのアプリケーションにサーバー時間を取得する必要がある場合は、単にSQL CALLRENT_TIMESTAMPを呼び出すことができます –