mongodb字段类型转化

最近在使用mongoDB, 发现mongo对字段类型的定义并不是很严格,完全依赖传入数据的类型,在加上PHP是弱类型的语言,所以难免会出现一些错误。如果预想的类型是Int型,但数据存储的是String,那数据在根据Int型检索的时候,就完全失效了。如果发现某个字段在存储的时候出现了分歧怎么办?当然首先要修正程序在数据传入时候的错误,对于Int型一定要保证其类型的正确性。

example:


1

2

3

$user_arr = array (

  ‘uid‘ => intval ($_SESSION["user"]["id"]),  //对于Int类型的数据,一定要保证其类型的正确性!

);

那如何修正当前已存在数据类型的不同呢?!

查询所有字段类型是String的数据,然后将String转为Int:


1

2

3

4

5

6

7

db.you_collection_name.find(‘uid‘ : { $type : 2 }).forEach(

  function(x)

  {

    x.uid = parseInt(x.uid) ;        //将String转为Int

    db.you_collection_name.save(x);

  }

)

对于mongoDB字段类型的定义可参考:http://docs.mongodb.org/manual/reference/operator/type/#_S_type

转自http://www.wangwei.info/2013/07/mongodb-type-conversion/

时间: 2024-10-10 13:18:17

mongodb字段类型转化的相关文章

mysql数据库函数 concat 字段类型转化、字段拼接

select l.lid, GROUP_CONCAT(s.NAME) shopname, m.realname, u.NAME, m.phone, a.name, concat(l.progress,'') from loan l, bank b, merchant m, bank_user u, area a, shop s where l.bid=b.bid and l.mid=m.mid and l.uid=u.uid and b.aid=a.id and l.lid=s.lid GROU

经过字段类型转化后的查询不走索引

表结构如下: mysql> show create table tag_item_list\G*************************** 1. row ***************************       Table: tag_item_listCreate Table: CREATE TABLE `tag_item_list` (  `tag_item_list_id` bigint(20) unsigned NOT NULL auto_increment,  `ta

数据库中存储日期的字段类型到底应该用varchar还是datetime

将数据库中存储时间的数据类型改为varchar(),这时最好让这些时间是数据库中自动生成的(一个没有格式的输入也可能会导致输出错误),因为存储类型为varchar(),所以获取到的值也就被认为是一个字符串,直接将数据库中的时间字符串进行转化(这时那些转化函数是能识别数据库中的时间函数的),客户端的时间格式不再影响转换过程. 不过数据库中存储时间的类型如果为字符型也会带来一些麻烦: 数据库中的时间仅仅是用来显示.查找的,那么影响还不算大,但如果对时间字段进行一些算法如计算星期.DateDiff.D

Asp.net 面向接口可扩展框架之类型转化基础服务

新框架正在逐步完善,可喜可贺的是基础服务部分初具备模样了,给大家分享一下 由于基础服务涉及太广,也没开发完,这篇只介绍其中的类型转化部分,命名为类型转化基础服务,其实就是基础服务模块的类型转化子模块 说到类型转化必须要清楚.net的类型,类型都不清楚何来类型转化 1.Primitive类型 1.1 这个概念估计很多人都没听说过,Primitive不是一个新类型,而是.net类型中最基本的一种分类,是基元类型的意思       MS将类型分为三类:Primitive(基元类型).Complex(复

SQL Server 字段类型 decimal(18,6)小数点前是几位?记一次数据库SP的BUG处理

原文:SQL Server 字段类型 decimal(18,6)小数点前是几位?记一次数据库SP的BUG处理 SQL Server 字段类型 decimal(18,6)小数点前是几位? 不可否认,这是一个很低级的问题.... 为什么会问这么低级的问题? 由于这个问题,导致一个数据导入的SP执行失败....以至于困扰了我好几个小时.... 事情是这样的... 公司总部上了一套Oracle的ERP,我们系统中有些数据要从里面取,比如Supplier,Product等. Oracle会导出数据文件,我

ORACLE 当字段中有数据如何修改字段类型

创建视图的时候,因为表太多,里面一些字段类型不一样,PL/SQL报错,为'表达式必须具有对应表达式相同的数据类型',发现后,一个字段的类型为CLOB和VARCHAR2(4000)两种,将CLOB进行修改 将CLOB字段修改成varchar2(4000)字段 第一步:把原字段换个名字,此条的sql是把C_009700010003换成C_0097000100031 alter table 表名 rename column  当前字段 to 备用字段; alter table T_00970001 r

【线上问题系列】DB字段类型变更导致核心服务不可用

背景 业务说明 接到一个业务需求,往DB表中某个字段里新增一些数据,该字段本来是text类型,发现根据业务需求来说,新增数据超过text类型的最大长度,因此需要对数据库表的该字段类型做变更,变更为了MEDIUMTEXT类型来解决业务需求: 数据流转 DB表的数据会通过数据处理转化到mongo中存储,然后mongo再加载到redis中,打点服务会从redis读取该数据,进行json encode,然后做业务处理: 问题过程 开发反馈打点服务sg.fk集群机器出现响应时间突增以及请求出现大量5xx,

sqlserver字段类型

bit    整型 bit数据类型是整型,其值只能是0.1或空值.这种数据类型用于存储只有两种可能值的数据,如Yes 或No.True 或False .On 或Off. 注意:很省空间的一种数据类型,如果能够满足需求应该尽量多用. tinyint   整型 tinyint 数据类型能存储从0到255 之间的整数.它在你只打算存储有限数目的数值时很有用.这种数据类型在数据库中占用1 个字节. 注意:如果bit类型太单调不能满足您的需求,您可以考虑用tinyint类型,因为这个类型相对也是比较安全的

asp 之 让实体中字段类型为DateTime的字段只显示日期不显示时间

       在我们平时的工作开发中,我们通常会遇到这样的一个问题:某个实体的某个字段是DateTime类型的,可是我们在界面上只想让它显示日期不显示时间! 一个订单实体: //订单类 public class order { //订单ID public int id{get;set;} //物品ID public int resId{get;set;} //物品名称 public string resName { get; set; } //物品价格 public decimal price