MongoDB更改欄位型別

周小董發表於2019-01-25

更改String型別為Date型別

db.getCollection('bond_sentiment_bulletin').find({'pubDate': {$type:2}}).forEach(
    function(doc){
        db.getCollection('bond_sentiment_bulletin').update({'_id': doc._id},{$set:{'pubDate': new ISODate(doc.pubDate)}})
    }
)
or 
db.getCollection('bond_sentiment_bulletin').find({'pubDate': {$type:2}}).forEach(
    function(doc){
        doc.pubDate = new ISODate(doc.pubDate);
        db.getCollection('bond_sentiment_bulletin').save(doc);
    }
)

更改Date型別為String型別

db.getCollection('bond_sentiment_bulletin').find({"_id" : 416,'pubDate':{$type:9}}).forEach( 
    function(x){ 
        x.pubDate = x.pubDate.toISOString(); 
        db.getCollection('bond_sentiment_bulletin').save(x); 
    } 
)

將型別轉為str

db.getCollection('bond_sentiment_bulletin').find({"_id" : 419}).forEach( 
    function(x){ 
        x.status = String(x.status); 
        db.getCollection('bond_sentiment_bulletin').save(x); 
    } 
)

擷取字串長度

db.getCollection('bond_sentiment_bulletin').find({"_id" : 416,'pubDate':{$type:2}}).forEach( 
    function(x){ 
        x.pubDate = x.pubDate.substr(0,10); 
        db.getCollection('bond_sentiment_bulletin').save(x); 
    } 
)

更改Date型別為String型別,並擷取字串長度

db.getCollection('bond_sentiment_bulletin').find({"_id" : 416,'pubDate':{$type:2}}).forEach( 
    function(x){ 
        x.pubDate = x.pubDate.toISOString().substr(0,10); 
        db.getCollection('bond_sentiment_bulletin').save(x); 
    } 
)

把時間型別轉為NumberLong的時間戳型別

db.getCollection('bond_sentiment_bulletin').find({"_id" : 419,'pubDate':{$type:9}}).forEach( 
    function(x){ 
        x.pubDate = NumberLong(x.pubDate.getTime()/1000); 
        db.getCollection('bond_sentiment_bulletin').save(x); 
    } 
)

設定欄位為int型別,NumberInt(3),預設是double型別

db.getCollection('bond_sentiment_bulletin').find({"sentiment" : null}).forEach(
   function(item){                
       db.getCollection('bond_sentiment_bulletin').update({"_id":item._id},{$set:{"sentiment":NumberInt(3)}})
   }
)

修改double型別為int型別

db.getCollection('bond_sentiment_bulletin').find({'sentiment' : { $type : 1 }}).forEach(
    function(x) {  
        x.sentiment = NumberInt(x.sentiment);
        db.getCollection('bond_sentiment_bulletin').save(x);  
    }
)

字串轉為浮點數

db.getCollection('bond_sentiment_bulletin').find({'editTime': {$type:2}}).forEach(
    function(doc){
        db.getCollection('bond_sentiment_bulletin').update({'_id': doc._id},{$set:{'editTime': parseFloat(doc.editTime)}})
    }
)

字串轉為double

db.getCollection('bond_sentiment_bulletin').find({'editTime': {$type:2}}).forEach(
    function(doc){
        db.getCollection('bond_sentiment_bulletin').update({'_id': doc._id},{$set:{'editTime': parseInt(doc.editTime)}})
    }
)

欄位型別type的對應表如下: 
欄位型別type的對應表

欄位型別編號:

1 Double 浮點型 
2 String UTF-8字串都可表示為字串型別的資料 
3 Object 物件,巢狀另外的文件 
4 Array 值的集合或者列表可以表示成陣列 
5 Binary data 二進位制 
7 Object id 物件id是文件的12位元組的唯一 ID 系統預設會自動生成 
8 Boolean 布林型別有兩個值TRUE和FALSE 
9 Date 日期型別儲存的是從標準紀元開始的毫秒數。不儲存時區 
10 Null 用於表示空值或者不存在的欄位 
11 Regular expression 採用js 的正規表示式語法 
13 JavaScript code 可以存放Javasript 程式碼 
14 Symbol 符號 
15 JavaScript code with scope 
16 32-bit integer 32位整數型別 
17 Timestamp 特殊語義的時間戳資料型別 
18 64-bit integer 64位整數型別

instanceof函式,判斷某個欄位是某個型別

count=0;
db.getCollection('bond_sentiment_bulletin').find({"_id" : 423}).forEach(function(x){if(x.pubDate instanceof Date){count++}});
print(count);

查詢address欄位資料型別為字串

db.getCollection('bond_sentiment_bulletin').find({address:{$type:2}})         //查詢address欄位資料型別為字串
db.getCollection('bond_sentiment_bulletin').find({address:{$type:"string"}})  //查詢address欄位資料型別為字串

查詢附件某個欄位存在的

db.getCollection('bond_sentiment_bulletin').find({'_id':{$gte:587863,$lte:800000},"isPrimary" : 0,'attach':{$elemMatch:{'UpdateTime': {$exists :true}}}})

MongoDB支援許多資料型別的列表下面給出:

  • String : 這是最常用的資料型別來儲存資料。在MongoDB中的字串必須是有效的UTF-8。
  • Integer : 這種型別是用來儲存一個數值。整數可以是32位或64位,這取決於您的伺服器。
  • Boolean : 此型別用於儲存一個布林值 (true/ false) 。
  • Double : 這種型別是用來儲存浮點值。
  • Min/ Max keys : 這種型別被用來對BSON元素的最低和最高值比較。
  • Arrays : 使用此型別的陣列或列表或多個值儲存到一個鍵。
  • Timestamp : 時間戳。這可以方便記錄時的檔案已被修改或新增。
  • Object : 此資料型別用於嵌入式的檔案。
  • Null : 這種型別是用來儲存一個Null值。
  • Symbol : 此資料型別用於字串相同,但它通常是保留給特定符號型別的語言使用。
  • Date : 此資料型別用於儲存當前日期或時間的UNIX時間格式。可以指定自己的日期和時間,日期和年,月,日到建立物件。
  • Object ID : 此資料型別用於儲存文件的ID。
  • Binary data : 此資料型別用於儲存二進位制資料。
  • Code : 此資料型別用於儲存到文件中的JavaScript程式碼。
  • Regular expression : 此資料型別用於儲存正規表示式

官網參考:https://docs.mongodb.com/manual/reference/operator/query/type/index.html

參考:
https://blog.csdn.net/laoyang360/article/details/72594344
https://blog.csdn.net/haiyanggeng/article/details/80250117
https://blog.csdn.net/liangxw1/article/details/78982320
https://blog.csdn.net/xiongzaiabc/article/details/81909771

相關文章