统一规范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”
posted @ 2022-05-23 17:45  星辰似昨  阅读(113)  评论(0)    收藏  举报