2012-05-07 77 views
7

我正在嘗試查找在指定時間內創建的所有文檔。 我正在使用c#和mongodb c#驅動程序。MongoDB和DateTimeOffset類型

我的實體如下:

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?

+0

更新日期時間.Now.AddMinutes(-15);到DateTime.UtcNow.AddMinutes(-15); – Noel

回答

11

DateTimeOffset根本不會序列化爲Date,但是(默認情況下)是[ticks,timezone offset]的數組。因此,您不能像查看正常日期那樣查詢它。相反,我們會根據滴答來查詢。你需要確保你的時區偏移是相同的,否則這將不起作用。

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

基本上,我們打算比較存儲數組的第一個元素和滴答計數。對不起再次來到這個答案的時間。

+0

Craig,當我使用FindAll()時,從我的文檔檢索到我的CreationTimestamp是{07/05/2012 16:39:20 +01:00}。當我做一個Query.GT(「CreationTimestamp」,compareTime).ToJson();我的價值是「{\」CreationTimestamp \「:{\」$ gt \「:ISODate(\」2012-05-07T15:24:29.037Z \「)}}」所以我希望這會返回文檔 – Noel

+0

是我必須使用DateTimeOffset – Noel

+0

好吧,我更新了答案。 –