2012-12-16 17 views
8

Ich habe die Aggregatfunktion Gruppe Datumsfelder von Jahr zu nutzen versucht:MongoDB Aggregate Rahmen - Gruppe von Jahr

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

Einige meiner Tage, aber vor 1970 fallen und ein Windows-Benutzer zu sein ich ein fiese Fehler über gmtime:

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

ich die offensichtliche Antwort jetzt weiß, sind für mich eine virtuelle Maschine läuft oder etwas zu bekommen, aber ich war einfach neugierig, ob irgendwelche Workarounds für Windows (Windows 7 in meinem Fall) waren . Gelingt das nicht, wie viel von einem Performance-Einbußen würde das Datum als verschachteltes Objekt zu speichern sein heißt:

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

Ich bin nicht sicher, wie hektisch die geschätzt mit Indizes usw.

Jede Beratung wäre!

+0

Welche Version von Mongo verwenden Sie? – Alex

Antwort

0

Es ist bekannt, dass einige Windows-Versionen funktionieren. Verwenden Sie zufällig ein 32-Bit-Betriebssystem? Der betreffende Code ist here und hängt von der Implementierung gmtime_s() ab.

Wenn diese Auflistung nur für Aggregationsabfragen verwendet wird, können Sie sicher mit dem Speichern von Datumskomponenten in einem Objekt umgehen. Ich würde vorschlagen, die Feldnamen abzukürzen (z. B. y, m, d), um Speicherplatz zu sparen, da die Feldfolgen in jedem gespeicherten Dokument vorhanden sind. Der Nachteil hierbei ist, dass keiner der Aggregationsdatumsoperatoren verwendet werden kann. Möglicherweise möchten Sie den Zeitstempel als eine Ganzzahl mit Vorzeichen speichern (z. B. ts), sodass Sie bei Bedarf problemlos Bereichsabfragen durchführen können.

+0

Entschuldigung für die lange Verspätung - nur gerade dieses wieder besucht. Danke für deine Antwort! – backdesk

+0

Dies ist etwas teuflisch, da es die 'date type' Implementierung auf dieser Plattform ernsthaft lähmt. Dies tritt auch bei 64-Bit-Build auf: http://stackoverflow.com/q/21869602/2313887 –

+0

@NeilLunn: Ich notierte Ihren Kommentar in der anderen Frage und öffnete [SERVER-12816] (https: //jira.mongodb .org/browse/SERVER-12816), um dies zu verfolgen. – jmikola

Verwandte Themen