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

StartDateTime = 27.05.2013 02:09:00 +00: 00 reprezentujących 05/26/2013 07:09 PM CETPrawidłowo używając/obsługa datetimeoffset w MongoDB

Co nagrany w MongoDB:

> 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 
       ] 
     } 
] 

Zdaję sobie sprawę, że StartDateTime jest przechowywany jako Ticks w MongoDB.

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

Ta kwerenda nie działa:

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

Dodałem Query do # kierowcy Mongo C, która wykazuje następujące zapytanie:

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

dolna granica = 6350521 68609734070

Serwer = 6350521 7340000 0000

Górna granica = 6350530 32609734070

pytanie: Dlaczego jest MongoDB zapytanie nie wszystko powracającego?

db.ScheduledEvent.find ({ "$ zapytanie" { "StartDateTime": { "gte $": [NumberLong ("635052168609734070") 0] "$ LT": [NumberLong (” 635053032609734070"), 0]}} "$ orderby": { "StartDateTime": -1}})

Zbadał:

MongoDB and DateTimeOffset type ale szwy, że dostawca LINQ robi co to ma?

Tried:

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

produkuje żadnych wyników.

+0

Witam, czy kiedykolwiek doszedłeś do sedna tego? Mam ten sam problem ... – soupy1976

+0

Po tym odkryciu zawiesiłem mój projekt. Nie wróciłem jeszcze do tego. –

Odpowiedz

2

Podobną odpowiedź można znaleźć tutaj: MongoDB and DateTimeOffset type (jak można zauważyć w swoim pytaniu)

mam to działa z C# sterownik, wykonując następujące:

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

Wytwarza to JSON:

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

Powyższy JSON działa. Dla połączonej odpowiedzi powodem jest to, że DateTimeOffset jest tablicą.

Kiedy używam LINQ, otrzymuję (jak zauważyłem) inny wynik dla JSON.

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

Zapytanie LINQ powyżej produkuje następujące JSON:

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

nie jestem pewien, czy dostawcy LINQ w sterowniku C# musi być przymocowana do obsługi datetimeoffset ale przy użyciu kreator zapytań, aby określić Pierwszy element tablicy DateTimeOffset (StartDateTime.0) był jedynym sposobem, w jaki to działa.

+0

Wygląda na to, że rok później sytuacja nadal istnieje. Musiał zrobić to samo. –

0

użyć następującej składni w zapytaniu:

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