2013-04-24 9 views
9

Ich versuche Aggregation Rahmen (mit Rubin) zu verwenden, und das Datum wie dieses Projekt:MongoDB: kann nicht von BSON Typ EOO zu Datum konvertieren

db['requests'].aggregate([ 
{"$project" => { 
    _id: 0, 
    method: '$method', 
    user: '$user', 
    year: {'$year' => '$timestamp'} 
}}]) 

das Dokument wie folgt ein:

{ 
_id: ObjectId("5177d7d7df26358289da7dfd"), 
timestamp: ISODate("2013-04-12T03:58:05+00:00"), 
method: "POST", 
status: "200", 
inputsize: "874", 
outputsize: "4981", 
user: "131" 
} 

aber ich erhalte den folgenden Fehler:

Mongo::OperationFailure: Database command 'aggregate' failed: (errmsg: 'exception: can't convert from BSON type EOO to Date'; code: '16006'; ok: '0.0'). 

das ist seltsam, weil es richtig funktioniert, wenn ich diese laufen auf der genau gleichen db die i s mit mongorestore importiert.

+0

Anscheinend ist die Reihenfolge des Arrays, das an aggregate() übergeben wird, wichtig. Wenn Sie Felder haben, in denen etwas weggelassen wird, sollten Sie das in $ match hinzufügen und $ match als erstes Element im Array haben. I.e. > db.user_account.aggregate ([{$ match: {"uts": {$ vorhanden: true}, "chan_key": "333261c7a72650a95c68d30cd70"}}, {$ project: {"period_month": {$ month: "$ uts "}}}, {$ group: {_id: {" period_month ":" $ period_month "}," Nummer ": {$ sum: 1}}}]) –

Antwort

20

Das Problem war, dass ich einige Dokumente ohne das Zeitstempelfeld speicherte.

+0

Yup! Ich auch. Ich habe nach Dokumenten gesucht, bei denen mein Zeitstempel "Null" war und es nur ein Dokument gab. Ich habe das repariert und voila! Die Abfrage funktioniert. –

+1

Können Sie ein Beispiel dafür nennen, wie Sie solche Dokumente gefunden haben? – jsbisht

2

Wenn Sie einige Dokumente ohne dieses Zeitstempel-Feld haben benötigt, könnten Sie versuchen, diese (ich verwende Javascript/Mongoose-Notation):

year: { $cond: [{ $ifNull: ['$timestamp', 0] }, { $year: '$deliveryDateEnd' }, -1] } 

In diesem Fall würde jedes Dokument ohne das Zeitstempel-Feld zurückzukehren -1. Alle anderen Dokumente würden das Jahr wie erwartet zurückgeben.

Verwandte Themen