Обновить возраст на основе доба в коллекции в Mongodb

node.js mongodb database nosql

250 просмотра

2 ответа

5224 Репутация автора

У меня 1000 документов в одной коллекции.

{"_id": ObjectId ("56d97671f6ad671b7d1c3d76"), "parseId": "TdKxj9FFPY", "phone": "6643545645", "dob": "15-06-87", "age": 121 "создалAt": 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", "age": 100 "создалAt": 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", "age": 152 "creationAt": ISODate ("2016-03-01T16: 39: 00.947Z"), "updatedAt": ISODate ("2016-03-01T16: 39: 00.947Z"), "__v": 0}

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

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

Но некоторые значения age неверны. Значения dob верны. Так что мне нужно обновить значения age на основе dob в одном запросе вручную?

Автор: Muhsin Источник Размещён: 18.07.2016 05:55

Ответы (2)


0 плюса

345 Репутация автора

Отредактировано: мой плохой о первом.

Экспортируйте свои данные в JSON, выполните через это и снова импортируйте. Ваша единственная зависимость - фс и моменты.

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');
});

возрастные показатели = [29, 23, 74];

Автор: Dreamlines Размещён: 18.07.2016 06:07

1 плюс

5224 Репутация автора

Решение

Наконец, я нашел решение. Я просто экспортирую коллекцию в файл json и обновил все документы с помощью функции js и импортировал коллекции в базу данных.

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>
Автор: Muhsin Размещён: 19.07.2016 12:39
Вопросы из категории :
32x32