统一规范mongo数据库中的日期类型
统一规范mongo数据库中的日期类型
1、问题
在一个项目开发中,可能因为沟通不充分,或者脏数据,
导致在mongo数据库中的一张表里面,有一个表示更新时间的字段,其值存的各种花样
- 有字符串类型的【"2022-09-21"】
- 有long类型的【1554825600000】
- 有字符串long类型的【"1554825600000"】
- 有日期类型的【ISODate("2017-05-28T16:00:00.000Z")】
- 其他不规范数据【"","NaN","2022-9-8"】
2、解决
我们直接连上数据库修改
- 先修改值类型为字符串的两种情况:
$type : 2 表示值类型为字符串, 也可以写成 $type : "string"
sj.length == 13 表示: 字符串long类型的【"1554825600000"】
sj.length == 10 表示:字符串类型的【"2022-09-21"】
db.getCollection('knowledgeanli').find({'gengxinshijian' : {$type : 2}}).forEach(function(doc){
    let sj = doc.gengxinshijian;
    if (sj.length == 13) {
        doc.gengxinshijian = new Date(parseInt(sj));
    } else if (sj.length == 10) {
        doc.gengxinshijian = new Date(sj);
    } else {	// 不规范字段删掉
        delete(doc["gengxinshijian"]);
    }
    db.getCollection('knowledgeanli').save(doc);
})
- 再修改值类型为long的情况
db.getCollection('knowledgeanli').find({'chuangjianshijian' : {$type : 'long'}}).forEach(function(doc){
    let sj = doc.chuangjianshijian;
    doc.chuangjianshijian = new Date(sj);
    db.getCollection('knowledgeanli').save(doc);
})
3、$type
$type 有效的类型值,如下:
| Type | Number | Alias | Notes | 
|---|---|---|---|
| Double | 1 | “double” | |
| String | 2 | “string” | |
| Object | 3 | “object” | |
| Array | 4 | “array” | |
| Binary data | 5 | “binData” | |
| Undefined | 6 | “undefined” | Deprecated. | 
| ObjectId | 7 | “objectId” | |
| Boolean | 8 | “bool” | |
| Date | 9 | “date” | |
| Null | 10 | “null” | |
| Regular Expression | 11 | “regex” | |
| DBPointer | 12 | “dbPointer” | Deprecated. | 
| JavaScript | 13 | “javascript” | |
| Symbol | 14 | “symbol” | Deprecated. | 
| JavaScript (with scope) | 15 | “javascriptWithScope” | |
| 32-bit integer | 16 | “int” | |
| Timestamp | 17 | “timestamp” | |
| 64-bit integer | 18 | “long” | |
| Decimal128 | 19 | “decimal” | New in version 3.4. | 
| Min key | -1 | “minKey” | |
| Max key | 127 | “maxKey” | 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号