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