数据处理

    • i-csv
    • import-csv
    • export-csv
    • json2csv
    • fastcsv

    https://github.com/i5ting/json2csv

    import-csv

    https://github.com/i5ting/import-csv

    默认使用gbk编码

    指定字符编码机

    1. import_csv('test.csv',function(err, data){
    2. console.log(data);
    3. }, 'gbk')

    默认使用gbk编码

    1. var export_csv = require('.')
    2. var data = [
    3. {a:1,b:2},
    4. {a:2,b:2},
    5. {a:3,b:2}
    6. ]
    7. export_csv(data, 'test1.csv')
    1. var export_csv = require('.')
    2. var data = [
    3. { a: 1, b: 2 },
    4. { a: 2, b: 2 },
    5. { a: 3, b: 2 }
    6. ]
    7. export_csv(data, 'test3.csv', function (item) {
    8. for (var key in item) {
    9. item[key] = 'yy +' + item[key];
    10. }
    11. })

    指定回调函数

    指定回调函数,并生成header

    1. var export_csv = require('.')
    2. var data = [
    3. {a:1,b:2},
    4. {a:2,b:2},
    5. ]
    6. export_csv(data, 'test2.csv', function (item) {
    7. return item;
    8. }, function () {
    9. console.log('end...');
    10. }, true)

    mongodb如何统计

    1. var json2csv = require('json2csv');
    2. require('../db.js');
    3. var fs = require('fs');
    4. var Order = require('../app/models/order');
    5. var Activity = require('../app/models/activity');
    6. var Wechat = require('../app/models/wechat');
    7. var Contact = require('../app/models/contact');
    8. function main(){
    9. Order.model.aggregate([
    10. {$match : {status2 : {$exists : true} }},
    11. {$group : {_id : "$activity" , count : {$sum : "$product_count"}}}
    12. ]).exec(function (err, data) {
    13. var obj = [];
    14. for (var i = data.length - 1; i >= 0; i--) {
    15. var json = {
    16. "url" : "http://shop.mengxiaoban.cn/iscroll.html?id=" + String(data[i]._id),
    17. "count" : String(data[i].count)
    18. }
    19. obj.push(json);
    20. console.log(json.url);
    21. }
    22. var opts = {
    23. data: obj,
    24. quotes: ''
    25. };
    26. json2csv(opts, function(err, csv) {
    27. if (err) console.log(err);
    28. fs.writeFile('./1119todayurl.csv', csv, function(err) {
    29. if (err) throw err;
    30. console.log('file saved');
    31. });
    32. });
    33. })
    34. }
    35. }
    36. main();

    AGGREGATION 关联

    《SQL to Aggregation Mapping Chart》

    了解索引优化

    1. ContactSchema = new Schema({
    2. ...
    3. owner: {
    4. type: Schema.ObjectId,
    5. required: true,
    6. index: true
    7. }
    8. });

    了解explain

    1. db.usermodels.find({
    2. '_id' :{
    3. "$gt" :ObjectId("55940ae59c39572851075bfd")
    4. }
    5. }).explain()

    关注点

    • stage:查询策略
    • nReturned:返回的文档行数
    • needTime:耗时(毫秒)
    • indexBounds:所用的索引

    profile级别有三种:

    • 0:不开启
    • 1:记录慢命令,默认为大于100ms
    • 2:记录所有命令
    • 3、查询profiling记录
      开启
    1. db.setProfilingLevel(2, 20)

    默认记录在system.profile中

    1. db['system.profile'].find()

    MONGODB的部署

    • replset

    我写的《 mongodb运维之副本集实践》