2013-05-27 5 views
9
public class ScheduledEvent : Event 
{ 
    public DateTimeOffset StartDateTime { get; set; } 
} 

StartDateTime = 2013年5月27日午前2時09分00秒AM 00:2013年5月26日7時09分PM PSTにMongoDBに記録されていますどのようなは適切にMongoDBでのDateTimeOffsetの取り扱い/使用

表す00:

> db.ScheduledEvent.find().toArray() 
[ 
     { 
       "_id" : BinData(3,"ZE2p31dh00qb6kglsgHgAA=="), 
       "Title" : "Today 26th at 7:09pm", 
       "Length" : "00:00:00", 
       "MoreInformation" : "http://1.com", 
       "Speakers" : [ 
         { 
           "_id" : BinData(3,"ndzESsQGukmYGmMgKK0EqQ=="), 
           "Name" : "Mathias Brandewinder" 
         } 
       ], 
       "Location" : { 
         "_id" : BinData(3,"AAAAAAAAAAAAAAAAAAAAAA=="), 
         "Name" : "Somwhere " 
       }, 
       "Organizers" : [ 
         { 
           "_id" : BinData(3,"AAAAAAAAAAAAAAAAAAAAAA=="), 
           "Name" : null 
         } 
       ], 
       "CreatedOn" : [ 
         NumberLong("635052144104050898"), 
         0 
       ], 
       "StartDateTime" : [ 
         NumberLong("635052173400000000"), 
         0 
       ] 
     } 
] 

StartDateTimeはMongoDBにティックとして保存されています。

var dateMarker = DateTimeOffset.UtcNow; 
var nextDay = dateMarker.AddDays(1); 

このクエリでは動作しません:

var today = EventRepoistory.All().Where(z => z.StartDateTime >= dateMarker && z.StartDateTime < nextDay).OrderByDescending(z => z.StartDateTime).ToList(); 

私は、次のクエリを示しモンゴC#のドライバーに、クエリの表示を追加しました:

{ "$query" : { "StartDateTime" : { "$gte" : [NumberLong("635052168609734070"), 0], "$lt" : [NumberLong("635053032609734070"), 0] } }, "$orderby" : { "StartDateTime" : -1 } } 
バインド

下段= 6350521 68609734070

サーバー= 6350521 7340000なぜMongoDBのクエリは何も返していません:0000

アッパー= 6350530 32609734070

質問を拘束しますか?

db.ScheduledEvent.find({ "$クエリ":{ "StartDateTime":{ "$ GTE":[NumberLong( "635052168609734070")、0]、 "$のLT":[NumberLong(」 635053032609734070" )、0]}}、 "$のORDERBY":{ "StartDateTime":-1}})を研究し

MongoDB and DateTimeOffset typeが、それはLINQプロバイダは、それがになって何やっていることを縫い目?

が試み:

db.ScheduledEvent.find({ "StartDateTime" : { "$gte" : [NumberLong("1"), 0] } } ) 

は結果を生成しません。

+0

こんにちは、あなたはこれまで一番下に入りましたか?私は同じ問題があります... – soupy1976

+0

私はこの発見の後、私のプロジェクトを保留にしました。私はまだそれに戻っていない。 –

答えて

2

同様の答えがここに発見された:MongoDB and DateTimeOffset type(あなたがあなたの質問に注意して)

私は、このことによって、C#のドライバーで作業ました次

var query = Query.GT("StartDateTime.0", startDate.Ticks); 
var json = query.ToJson(); 

は、このJSONを生成します:

{ "StartDateTime.0" : { "$gt" : NumberLong("635251617859913739") } } 

上記のJSONが動作します。リンクされた答えによると、DateTimeOffsetは配列です。

私はLINQを使用しているときに、(あなたが気づいたように)JSONの結果を取得します。

{ "StartDateTime" : { "$gte" : [NumberLong("635251617859913739"), 0], "$lt" : [NumberLong("635251635859913739"), 0] } } 

C#のドライバでのLINQプロバイダはのDateTimeOffsetを処理するために修正する必要がありますが、指定するクエリビルダを使用した場合、私はわからない:

var query = from r in col.AsQueryable<MyObjectType>() 
    where r.StartDateTime>= startDate && r.StartDateTime< endDate 
    select r; 

LINQクエリは、上記以下のJSONを生成しますDateTimeOffset配列(StartDateTime.0)の最初の要素は、私がこれを動作させる唯一の方法でした。

+0

1年後の状況はまだあります。同じことをしなければならなかった。 –

0

クエリで次の構文を使用します。

{ 
    "StartDateTime.0": { 
     "$gte": 635052168609734070 
    } 
}