MongoDB 修改数据类型

MongoDB的类型转换。包括:string转double, string转int, string转Date

//string转为double类型
db.law.find({'state' : { $type : 2 }}).forEach( function (x) {
  x.state = parseInt(x.state);
  db.law.save(x);
});
 
//string转为int类型
db.law.find().forEach( function (x) {
  x.ise= NumberInt(x.ise);
  db.law.save(x);
});
 
//string转化为date类型
db.law.find().forEach( function (x) {
 x.eift = new ISODate(x.eift);
  db.law.save(x);
});
//string转decimal
db.law.find().forEach(function(x) {
    x.num_string = NumberDecimal(Number(x.num_string));
    db.law.save(x);
})

//将其转为string类型
db.law.find({ID:{$exists:true}}).forEach(function(x){
    x.ID=new String(x.ID);
    db.law.save(x);//保存
});

$type 有效的类型值,如下:

TypeNumberAliasNotes
Double1“double”浮点型 
String2“string”UTF-8字符串都可表示为字符串类型的数据
Object3“object”Object 对象,嵌套另外的文档 
Array4“array”值的集合或者列表可以表示成数组 
Binary data5“binData”二进制 
Undefined6“undefined”Deprecated.
ObjectId7“objectId”对象id是文档的12字节的唯一 ID 系统默认会自动生成 
Boolean8“bool”布尔类型有两个值TRUE和FALSE 
Date9“date”日期类型存储的是从标准纪元开始的毫秒数。不存储时区 
Null10“null”用于表示空值或者不存在的字段 
Regular Expression11“regex”采用js 的正则表达式语法 
DBPointer12“dbPointer”Deprecated.
JavaScript13“javascript”可以存放Javasript 代码
Symbol14“symbol”Deprecated.
JavaScript (with scope)15“javascriptWithScope” 
32-bit integer16“int”32位整数类型 
Timestamp17“timestamp”时间戳数据类型 
64-bit integer18“long”64位整数类型 
Decimal12819“decimal”New in version 3.4.
Min key-1“minKey” 
Max key127“maxKey” 

$type使用法语:

db.集合名.find({$type:类型值});    //这里的类型值能使用Number也能使用alias

查看“times”该字段的数据类型:

db.getCollection('content').find({"times":{$type:"long"}});
db.getCollection('content').find({"times":{$type:18}});

MongoDB存储时间类型数据时,都是先转换为UTC时间,然后存储到数据库中,当我们取出存储的时间时,就会出现时差的问题。比如我们用的北京时间,读取到的数值就会看到比当前时间少了8个小时,难道说我们在每次读取的时候都要单独处理一下时间吗,这就比较麻烦。其实,我们可以在存储的时候进行相应的处理,只需使用getTimezoneOffset()toISOString()函数。

localDate(v) {
	const d = new Date(v || Date.now());
	d.setMinutes(d.getMinutes() - d.getTimezoneOffset());
	return d.toISOString();
},

我们在存储时间的时候调用localDate()这个函数就可以了,无论你处在哪个时区结果显示都和当地时间一样。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值