2016-05-05 7 views
2

Ich experimentiere mit der Ausgabe von Date-Objekten als Schlüssel in einer Map-Funktion und kann nicht verstehen, was passiert, wenn das Date-Objekt nicht korrekt analysiert wird.Wenn ein Datum in einer CouchDB Map-Funktion ausgegeben wird - was wird für das Datumsobjekt aufgerufen?

ein einfaches Beispiel Datensatz verwenden:

{ 
    "_id": "e3681a4f5ce5685b777659804e9fd9f1", 
    "date": "2016-04-04T16:02:09.058+01:00" // okay datestring 
} 

{ 
    "_id": "99a5c50967a279e1d7fef1a4ed18d7fb", 
    "date": "2016-04-34T16:02:09.058+01:00" // invalid datestring 
} 

{ 
    "_id": "43a435ce71a4b92ab0dd4fe9d91fbbb2", 
    "date": "text" // invalid datestring 
} 

Und die folgende Karte Funktion:

function(doc) { 
    var date = new Date(doc.date); 
    emit(date,1); 
} 

ergibt folgendes Ergebnis Satz:

{"total_rows":3,"offset":0,"rows":[ 
{"id":"43a435ce71a4b92ab0dd4fe9d91fbbb2","key":null,"value":1}, 
{"id":"99a5c50967a279e1d7fef1a4ed18d7fb","key":null,"value":1}, 
{"id":"e3681a4f5ce5685b777659804e9fd9f1","key":"2016-04-04T15:02:09.058Z","value":1} 
]} 

Wo sind die Nullwerte für Der Schlüssel kommt von? Es ruft nicht toString() oder toISOString() an den Daten, da sie zurückgeben würden "Invalid Date"

Was ist hier los?

Antwort

2

Im Grunde funktioniert es wie folgt aus:

function emit(key, value) { 
    var row = { id: currentDocId(), key: key, value: value }; 
    appendToOutput(JSON.stringify(row)); 
} 

So sollte es leicht sein, zu sehen, wo die Werte aus kommen, da toJSON() auf einem ungültigen Datum null zurückgibt.

In Wirklichkeit ist es nicht die emit() Funktion, die dies überhaupt tut, aber die Standard-Rendering-Implementierung verwendet, wenn keine list function geliefert wird.

while (row = getRow()) { 
    send(JSON.stringify(row)) 
} 
+0

Ah ich glaube, ich sehe here.JSON.stringify() das Datum ungültig Objekt null analysieren, wie hier beschrieben: https://developer.mozilla.org/en/docs/Web/JavaScript/Referenz/Global_Objects/JSON/stringify – Ric

+0

@Ric Ja, 'neues Datum (" 2016-04-34T16: 02: 09.058 + 01: 00 "). ToJSON()' gibt 'null' zurück. – OrangeDog

+0

Ich habe gerade festgestellt, dass die Funktion 'Date.parse()' '' NaN' mit Datumszeichenfolgen wie "2016-04-34 16:02:09" zurückgibt, wenn man Ansichten mit JavaScript in CouchDB programmiert. Es muss im Format "2016-04-34T16: 02: 09" sein. – NecipAllef