MongoDB支持以下數(shù)據(jù)類型
類型 數(shù)字 備注
Double 1 雙精度浮點(diǎn)數(shù) - 此類型用于存儲(chǔ)浮點(diǎn)值
String 2 字符串 - 這是用于存儲(chǔ)數(shù)據(jù)的最常用的數(shù)據(jù)類型。MongoDB中的字符串必須為UTF-8
Object 3 對(duì)象 - 此數(shù)據(jù)類型用于嵌入式文檔
Array 4 數(shù)組 - 此類型用于將數(shù)組或列表或多個(gè)值存儲(chǔ)到一個(gè)鍵中
Binary data 5 二進(jìn)制數(shù)據(jù) - 此數(shù)據(jù)類型用于存儲(chǔ)二進(jìn)制數(shù)據(jù)
Undefined 6 已廢棄
Object id 7 對(duì)象ID - 此數(shù)據(jù)類型用于存儲(chǔ)文檔的ID
Boolean 8 布爾類型 - 此類型用于存儲(chǔ)布爾值(true / false)值
Date 9 日期 - 此數(shù)據(jù)類型用于以UNIX時(shí)間格式存儲(chǔ)當(dāng)前日期或時(shí)間??梢酝ㄟ^創(chuàng)建日期對(duì)象并將日,月,年的日期進(jìn)行指定自己需要的日期時(shí)間
Null 10 Null - 此類型用于存儲(chǔ)Null值
Regular 11 正則表達(dá)式 - 此數(shù)據(jù)類型用于存儲(chǔ)正則表達(dá)式
JavaScript 13 代碼 - 此數(shù)據(jù)類型用于將JavaScript代碼存儲(chǔ)到文檔中
Symbol 14 符號(hào) - 該數(shù)據(jù)類型與字符串相同;但是,通常保留用于使用特定符號(hào)類型的語言
JavaScript (with scope) 15 代碼 - 此數(shù)據(jù)類型用于將帶作用域的JavaScript代碼存儲(chǔ)到文檔中
32-bit integer 16 32位整型 - 此類型用于存儲(chǔ)數(shù)值
Timestamp 17 時(shí)間戳 - 當(dāng)文檔被修改或添加時(shí),可以方便地進(jìn)行錄制
64-bit integer 18 64位整型 - 此類型用于存儲(chǔ)數(shù)值
Min key 255 最小鍵 - 此類型用于將值與最小BSON元素進(jìn)行比較
Max key 127 最大鍵 - 此類型用于將值與最大BSON元素進(jìn)行比較
$type
??$type操作符是基于BSON類型來檢索集合中匹配的數(shù)據(jù)類型,并返回結(jié)果。數(shù)字的$type為1、字符串的$type為2、布爾值的$type為8。
數(shù)據(jù)批量插入
在操作數(shù)據(jù)庫時(shí)要注意兩個(gè)能力:
第一個(gè)是快速存儲(chǔ)能力。
第二個(gè)是方便迅速查詢能力。
【批量插入】
批量數(shù)據(jù)插入是以數(shù)組的方式進(jìn)行的。
db.test.insert([
{"_id":1},
{"_id":2},
{"_id":3}
])
??\注意一次插入不要超過48M,像.zip和大圖片什么的盡量用靜態(tài)存儲(chǔ),MongoDB存儲(chǔ)靜態(tài)路徑就好,這也算是一個(gè)規(guī)則。
【批量插入性能測(cè)試】
循環(huán)插入測(cè)試:
var startTime = (new Date()).getTime(); //得到開始時(shí)間
var db = connect('log'); //鏈接數(shù)據(jù)庫
//開始循環(huán)
for(let i=0;i<1000;i++){
db.test.insert({num:i});
}
var runTime = (new Date()).getTime()-startTime;//計(jì)算時(shí)間差
print ('This run this is:'+runTime+'ms');//打印出來
This run this is:430ms
批量插入測(cè)試:
var startTime = (new Date()).getTime();
var db = connect('log');
var tempArray = [] //聲明一個(gè)數(shù)組
for(let i=0;i<1000;i++){ //循環(huán)向數(shù)組中放入值
tempArray.push({num:i});
}
db.test.insert(tempArray) //批量一次插入
var runTime = (new Date()).getTime()-startTime;
print ('This run this is:'+runTime+'ms');
This run this is:23ms
對(duì)比可以看出,批量插入性能遠(yuǎn)遠(yuǎn)超過循環(huán)插入。