2012-12-16 14 views
8

Próbowałem użyć funkcji zbiorczej do pól daty grupa przez rok:MongoDB Kruszywo Framework - Grupa rok

db.identities.aggregate([ 
{ 
    $group : { 
     _id : { year : {$year : "$birth_date"}}, 
     total : {$sum : 1} 
     } 
    } 
]) 

Niektóre z moich dat jednak spadnie przed 1970 i będąc użytkownikiem systemu Windows otrzymuję paskudny błąd o gmtime:

{ 
    "errmsg" : "exception: gmtime failed - your system doesn't support dates before 1970", 
    "code" : 16422, 
    "ok" : 0 
} 

wiem oczywistą odpowiedź teraz jest dla mnie, aby uzyskać wirtualną uruchomioną maszynę czy coś, ale byłem po prostu ciekawy, czy były jakieś obejścia dla Windows (Windows 7 w moim przypadku) . W przypadku jego braku, ile trafień wydajności byłby przechowywania datę jako obiektu zagnieżdżonego być tj:

birth_date : { 
    year : 1980, 
    month : 12, 
    day : 9 
} 

Nie jestem zbyt pewien, jak gorączkowe, że będzie z indeksów itd

Wszelkie porady mile widziane!

+0

jakiej wersji Mongo używasz? – Alex

Odpowiedz

0

Niektóre wersje systemu Windows działają. Czy używasz 32-bitowego systemu operacyjnego? Kod, o którym mowa, to here i zależy od implementacji gmtime_s().

Jeśli ta kolekcja służy wyłącznie do zapytań o agregację, można na pewno uzyskać przy przechowywaniu składników daty w obiekcie. Proponuję skrócić nazwy pól (np. y, m, d), aby zaoszczędzić na pamięci, ponieważ ciągi pól są obecne w każdym zapisanym dokumencie. Kompromis polega na tym, że nie można używać żadnego operatora daty agregacji. Możesz chcieć zapisać znacznik czasu jako liczbę całkowitą ze znakiem (np. ts), aby w razie potrzeby móc łatwo wykonywać zapytania o zakres.

+0

przepraszam za długie opóźnienie - tylko ponownie go odwiedziłem. Dzięki za odpowiedź! – backdesk

+0

To jest nieco diaboliczne, ponieważ poważnie kaleczy implementację 'date type' na tej platformie. Dzieje się tak również na 64-bitowej wersji: http://stackoverflow.com/q/21869602/2313887 –

+0

@NeilLunn: W drugim pytaniu zanotowałem twój komentarz i otworzyłem [SERVER-12816] (https: //jira.mongodb .org/browse/SERVER-12816) do śledzenia tego. – jmikola

Powiązane problemy