9

指定された時間内に作成されたすべてのドキュメントを検索しようとしています。私はc#とmongodb c#ドライバーを使用しています。

私の実体は次のとおりです。

public class Entity
{
    public Gid Id { get; private set; }
    public DateTimeOffset CreationTimestamp { get; private set; }
    public Entity()
    {
    }
}

だから私はこれができると思った:

DateTime compareTime = DateTime.UtcNow.AddMinutes(-15);
var result = _collection.Find(Query.GT("CreationTimestamp", compareTime)).Count();

コレクションにデータがある場合でも、結果はゼロのカウントになります。DateTimeOffsetからDateTimeに変更すると、結果が返されます。

DateTimeOffsetタイプがサポートされていないという問題はありますか?もしそうなら、エンティティがDateTimeOffsetを使用する必要があるので、これを回避する方法はありますか?

4

1 に答える 1

12

DateTimeOffsetは、Dateとしてはまったくシリアル化されませんが、(デフォルトでは)[ticks、timezoneoffset]の配列としてシリアル化されます。そのため、通常の日付と同じ方法でクエリを実行することはできません。代わりに、ティックに基づいてクエリを実行します。タイムゾーンのオフセットが同じであることを確認する必要があります。同じでない場合、これは機能しません。

DateTimeOffsett compareTime = DateTimeOffsett.UtcNow.AddMinutes(-15);
var result = _collection.Find(Query.GT("CreationTimestamp.0", compareTime.Ticks)).Count();

基本的に、格納されている配列の最初の要素をティックカウントと比較します。この回答にたどり着くまでに時間がかかって申し訳ありません。

于 2012-05-07T12:57:19.377 に答える