2016-07-18 5 views
0

Ich habe 1000 Dokumente in einer der Sammlung.Update-Alter basierend auf dob in einer Sammlung in Mongodb

{ "_id": ObjectId ("56d97671f6ad671b7d1c3d76"), "parseId": "TdKxj9FFPY", "Telefon", "6643545645", "DOB": "15-06-87", "Alter" : 121 "createdAt": ISODate ("2016-03-01T16: 39: 00.947Z"), "updatedAt": ISODate ("2016-03-01T16: 39: 00.947Z"), "__v": 0}

{ "_id": ObjectId ("56d97671f6ad671b7d1c3d76"), "parseId": "TdKxj9FFPY" "phone": "9847523654", "DOB": "15-06-93", "Alter": 100 "createdAt": ISODate ("2016-03-01T16: 39: 00.947Z"), "updatedAt": ISODate ("2016-03-01T16: 39: 00.947Z"), "__v": 0}

{ "_id": ObjectId ("56d97671f6ad671b7d1c3d76"), "parseId": "TdKxj9FFPY" "phone": "4564646646", "DOB": "15-06-43", "Alter": 152 " createdAt ": isodate (" 2016-03-01T16: 39: 00.947Z "), "updatedAt": isodate (" 2016-03-01T16: 39: 00.947Z "), "__v": 0}

...................

...................

Aber einige der Werte von Alter sind falsch. Die Werte von dob sind richtig.So muss ich die Werte des Alters basierend auf dem dob in einer einzigen Abfrage manuell aktualisieren?

+0

Sie fragt, wie dies mit einer MySQL-Abfrage zu tun, durch nur json Manipulation (nosql) oder durch andere Mittel, wo Sie diese Daten zuzugreifst? – Dreamlines

+1

Warum speichern Sie dieselben Informationen zweimal? Habe eine kanonische Repräsentation (DoB, wahrscheinlich in einem sinnvolleren Format als 'DD-MM-YY') und berechne bei Bedarf das Alter. – jonrsharpe

+0

@Dreamlines: Ich möchte die Sammlung mit Terminal (Nosql) updaten – Muhsin

Antwort

1

Schließlich fand ich eine Lösung.Ich exportiere nur die Sammlung in eine JSON-Datei und aktualisiert alle Dokumente mit der Funktion js und importiert die Sammlungen in die db.

html

<html> 

<head> 
    <script type="text/javascript" src="https://rawgit.com/eligrey/FileSaver.js/master/FileSaver.js"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
</head> 

<body> 
    <button id="save">save</button> 
</body> 
<script type="text/javascript"> 
function getAge(dateString) { 
    var today = new Date(); 
    var birthDate = new Date(dateString); 
    var age = today.getFullYear() - birthDate.getFullYear(); 
    var m = today.getMonth() - birthDate.getMonth(); 
    if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) { 
     age--; 
    } 
    return age; 
} 
var exportData; 
$.getJSON("input.json", function(data) { 
    exportData = data; 
    exportData.forEach(function(item, index) { 
     // console.log('item dob', item.dob); 
     var dobInfo = item.dob.split('-'); 
     var dd = dobInfo[0]; 
     if (dd < 10) { 
      dd = '0' + dd; 
     } 
     var mm = dobInfo[1]; 
     if (mm < 10) { 
      mm = '0' + mm; 
     } 
     var yy = dobInfo[2]; 
     yy = (yy < 17) ? '20' + yy : '19' + yy; 
     // console.log('dd', dd); 
     // console.log('mm', mm); 
     // console.log('yy', yy); 
     var newdate = mm + '-' + dd + '-' + yy; 
     // console.log('newdate',newdate); 
     console.log('index[' + index + ']', item.dob); 
     var age = getAge(newdate); 
     console.log('age--->', age); 
     exportData[index].age = age; 
    }); 
}); 
document.getElementById('save').onclick = function() { 
    var textToSave = JSON.stringify(exportData), 
     filename = 'output.json', 
     blob = new Blob([textToSave], { 
      type: "text/plain;charset=utf-8" 
     }); 

    saveAs(blob, filename); 
} 
</script> 

</html> 
0

EDITED: mein schlechtes über das erste.

Exportieren Sie Ihre Daten in ein JSON und führen Sie es durch und importieren Sie es erneut. Ihre einzige Abhängigkeit ist fs und momentsjs.

var moment = require('moment'), 
    fs = require('fs'), 
    json = [ 
     { "_id":"56d97671f6ad671b7d1c3d76", "parseId": "TdKxj9FFPY", "phone": "6643545645", "dob": "15-06-87", "age": 121, "createdAt": "2016-03-01T16:39:00.947Z", "updatedAt": "2016-03-01T16:39:00.947Z", "__v": 0 }, 
     { "_id":"56d97671f6ad671b7d1c3d76", "parseId": "TdKxj9FFPY", "phone": "9847523654", "dob": "15-06-93", "age": 100, "createdAt": "2016-03-01T16:39:00.947Z", "updatedAt": "2016-03-01T16:39:00.947Z", "__v": 0 }, 
     { "_id":"56d97671f6ad671b7d1c3d76", "parseId": "TdKxj9FFPY", "phone": "4564646646", "dob": "15-06-43", "age": 152, "createdAt": "2016-03-01T16:39:00.947Z", "updatedAt": "2016-03-01T16:39:00.947Z", "__v": 0 } 
    ]; 

Object.keys(json).forEach(function(key) { 
    age = moment().diff(moment(json[key].dob,"DD/MM/YY"),'years'); 

    // 
    //dates before 1970 are negative 
    // 
    if (parseInt(age) < 0) { 
     age += 100; 
    } 

    json[key].age = age; 
}); 

fs.writeFile('data.json', JSON.stringify(json), function (err) { 
    if (err) return console.log(err); 
    console.log('compeleted'); 
}); 

Altersausgaben = [29, 23, 74];

+1

Das Berechnen eines Alters funktioniert nicht so. – str

+0

Sie haben völlig Recht. Ich werde das in einer Sekunde aktualisieren. müde und nicht denken – Dreamlines

Verwandte Themen