# 數據處理
## csv處理
* i-csv
* import-csv
* export-csv
* json2csv
* fastcsv
### json2csv
json to csv converter
[https://github.com/i5ting/json2csv](https://github.com/i5ting/json2csv)
## import-csv
[https://github.com/i5ting/import-csv](https://github.com/i5ting/import-csv)
默認使用gbk編碼
~~~
var import_csv = require('import-csv')
import_csv('test.csv',function(err, data){
console.log(data);
})
~~~
指定字符編碼機
~~~
var import_csv = require('import-csv')
import_csv('test.csv',function(err, data){
console.log(data);
}, 'gbk')
~~~
## export-csv
[https://github.com/i5ting/export-csv](https://github.com/i5ting/export-csv)
默認使用gbk編碼
~~~
var export_csv = require('.')
var data = [
{a:1,b:2},
{a:2,b:2},
{a:3,b:2}
]
export_csv(data, 'test1.csv')
~~~
過濾item,重寫數據
~~~
var export_csv = require('.')
var data = [
{ a: 1, b: 2 },
{ a: 2, b: 2 },
{ a: 3, b: 2 }
]
export_csv(data, 'test3.csv', function (item) {
for (var key in item) {
item[key] = 'yy +' + item[key];
}
return item;
})
~~~
指定回調函數
~~~
var export_csv = require('.')
var data = [
{a:1,b:2},
{a:2,b:2},
{a:3,b:2}
]
export_csv(data, 'test2.csv', function (item) {
return item;
}, function () {
console.log('end...');
})
~~~
指定回調函數,并生成header
~~~
var export_csv = require('.')
var data = [
{a:1,b:2},
{a:2,b:2},
{a:3,b:2}
]
export_csv(data, 'test2.csv', function (item) {
return item;
}, function () {
console.log('end...');
}, true)
~~~
## mongodb如何統計
~~~
var json2csv = require('json2csv');
require('../db.js');
var fs = require('fs');
var Order = require('../app/models/order');
var Activity = require('../app/models/activity');
var Wechat = require('../app/models/wechat');
var Contact = require('../app/models/contact');
function main(){
Order.model.aggregate([
{$match : {status2 : {$exists : true} }},
{$group : {_id : "$activity" , count : {$sum : "$product_count"}}}
]).exec(function (err, data) {
var obj = [];
for (var i = data.length - 1; i >= 0; i--) {
var json = {
"url" : "http://shop.mengxiaoban.cn/iscroll.html?id=" + String(data[i]._id),
"count" : String(data[i].count)
}
obj.push(json);
console.log(json.url);
}
var opts = {
data: obj,
fields: ['url','count'],
fieldNames: ['url','count'],
quotes: ''
};
json2csv(opts, function(err, csv) {
if (err) console.log(err);
fs.writeFile('./1119todayurl.csv', csv, function(err) {
if (err) throw err;
console.log('file saved');
});
});
})
}
}
main();
~~~
AGGREGATION 關聯
《SQL to Aggregation Mapping Chart》
[http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/](http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/)
## 優化查詢速度
了解索引優化
~~~
ContactSchema = new Schema({
...
owner: {
type: Schema.ObjectId,
required: true,
index: true
}
});
~~~
也可以這樣的
~~~
ContactSchema.ensureIndexes(owner);
~~~
## 了解explain
~~~
db.usermodels.find({
'_id' :{
"$gt" :ObjectId("55940ae59c39572851075bfd")
}
}).explain()
~~~
關注點
* stage:查詢策略
* nReturned:返回的文檔行數
* needTime:耗時(毫秒)
* indexBounds:所用的索引
[http://docs.mongodb.org/v3.0/reference/explain-results/](http://docs.mongodb.org/v3.0/reference/explain-results/)
## 了解profile
profile級別有三種:
* 0:不開啟
* 1:記錄慢命令,默認為大于100ms
* 2:記錄所有命令
* 3、查詢profiling記錄 開啟
~~~
db.setProfilingLevel(2, 20)
~~~
默認記錄在system.profile中
~~~
db['system.profile'].find()
~~~
## MONGODB的部署
* replset
* shard
我寫的《 mongodb運維之副本集實踐》
[https://cnodejs.org/topic/5590adbbebf9c92d17e734de](https://cnodejs.org/topic/5590adbbebf9c92d17e734de)
- 前言
- 1 skill
- 1.1 Coding WebIDE
- 1.2 git
- 1.3 extra practice
- 1.4 預習
- 2 nodejs入門
- 2.1 入門
- 2.2 安裝
- 2.3 helloworld
- 2.4 commonJS規范
- 2.5 模塊導出
- 2.6 Nodejs代碼調試
- 2.7 編寫Nodejs模塊
- 2.8 最小化問題
- 2.9 隨堂練習
- 3 異步流程控制
- 3.1 什么時候會用到異步流程控制
- 3.2 簡單做法async模塊
- 3.3 Promise/a+規范
- 3.4 Node.js Promise/a+實現
- 3.5 生成器Generators/yield
- 3.6 Async函數/Await
- 3.7 神奇的co
- 3.8 5種 yieldable
- 3.9 學習重點
- 3.10 隨堂練習
- 4 express和微信開發入門
- 4.1 入門
- 4.2 connect
- 4.3 靜態Http服務器
- 4.4 那些預處理器
- 4.5 路由
- 4.6 視圖與模塊引擎
- 4.7 中間件
- 4.8 更多實踐
- 4.9 微信入門
- 4.10 隨堂練習:完成登錄、注冊功能
- 5 微信實例與H5實踐
- 5.1 微信基礎和sandbox
- 5.2 公眾號菜單和自動回復
- 5.3 微信OAuth用戶授權
- 5.4 微信分享
- 5.5 wechat-api
- 5.6 H5-上篇
- 5.7 H5-下篇
- 5.8 隨堂練習
- 6 weui實戰
- 6.1 使用bower
- 6.2 移動端抽象
- 6.3 優化滑動列表
- 6.4 weui
- 6.5 讓weui和iscroll結婚
- 6.6 優化事件
- 6.7 how-to-write-h5
- 6.8 優化無止境
- 6.9 隨堂練習
- 7 微信支付
- 7.1 吹個牛
- 7.2 支付概述
- 7.3 科普幾個概念
- 7.4 準備
- 7.5 調試
- 7.6 公眾號支付(JSAPI)
- 7.7 對賬單
- 7.8 數據處理
- 7.9 隨堂練習
- 8 項目實戰《付費課程系統MVP》
- 8.1 需求分析
- 8.2 ui/ue
- 8.3 技術棧
- 8.4 模型
- 8.5 靜態api
- 8.6 開發
- 8.7 部署
- 8.8 監控
- 8.9 數據統計
- 8.10 demo
- 9 高級篇
- 9.1 前后端分離實踐?
- 9.2 如何展望未來的大前端
- 9.3 容器和微服務
- 10 答疑問題收集