Ich habe eine Kartenansicht in Couchbase erstellt, um den aktuellen Standort jeder Person zu finden.Couchbase- Mapreduce: letzter Standort
Die Dokumente sind wie folgt (mehrere Dokumente für gleiche PersonID existieren):
{
"_id": "PersonLocation::C38A2B74-166B-4EDE-A6E1-5B2DDE9350BB",
"type": "PersonLocation",
"PersonID": "AB62CD5B-ADDA-45E9-AFFE-76F4C0B97B52",
"CaptureDate": "2017-07-24T19:04:49.657",
"LocationID": "6E3E0CC4-FD8A-4602-8E68-C07E00DB6610"
},
{
"_id": "PersonLocation::930077A9-00DA-47C9-8A2C-8AB47ACFB83E",
"type": "PersonLocation",
"PersonID": "DD658CE5-BC54-4AB7-8DEC-544AD6662E09",
"CaptureDate": "2017-07-24T19:04:49.697",
"LocationID": "BC0E7923-3EDA-4CEF-864F-9B50AA218BBB"
}.....
Die Kartenfunktion ist:
function (doc, meta) {
if(doc.type =="PersonLocation"){
emit(doc.PersonID,{'LocationID':doc.LocationID, 'CaptureDate':doc.CaptureDate})
}
}
und Funktion reduzieren, ist:
function (keys, values) {
var LatestDate =''
var LatestLocation = ''
for (var i = 0; i < values.length; i++)
{
var obj = values[i];
if(obj.CaptureDate > LatestDate)
{
LatestDate = obj.CaptureDate;
LatestLocation =obj.LocationID
}
}
return LatestLocation
}
Nach dem Gruppieren des Ergebnisses nach Schlüsseln bekomme ich ein etwas korrektes Ergebnis, aber einige Datensätze sind nicht korrekt als thei r 'LatestLocation' wird als leer angezeigt (""), was eindeutig bedeutet, dass die Variable aus irgendeinem Grund nicht aktualisiert wird. Ich habe überprüft und bin mir ziemlich sicher, dass die LocationID und CaptureDate in jedem einzelnen Dokument vorhanden sind. Ich habe versucht, über Verjüngung zu lernen, aber konnte nicht den Dreh raus und ich fürchte, das hindert mich daran, das richtige Ergebnis zu bekommen. Bitte helfen Sie