最近在使用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