最近由于业务需求,需要使用php对mongo做一些操作,关于mongodb,选择的版本是:MongoDB shell version: 2.0.6
MongoDB是一种文档导向数据库管理系统,由C++撰写而成,以此来解决应用程序开发社区中的大量现实问题。2007年10月,MongoDB由10gen团队所发展。2009年2月首度推出。
wikipedia
mongodb的操作,对比mysql,有不少有意思的地方,在使用中,也发现一些不同的问题,本篇主要记录一下,mongodb对数据类型的要求
首先,我们用php操作mongodb,插入一些数据,执行脚本如下
$server = "mongodb://127.0.0.1:27017"; $opt = array( 'connect' => true, 'readPreference' => MongoClient::RP_SECONDARY_PREFERRED, //'replicaSet' => 'log', 'connectTimeoutMS' => 3000, 'w' => 1, 'wTimeout' => 2000, ); $ins = new MongoClient($server, $opt); //获取db $db = $ins->testdb; //查询的表 $collection = $db->test_collections; /********************** * 插入 *********************/ $insertArr = array( "name" => "testname", "id" => 123455, "sid" => "123456", "arr" => (object)array('x'=>1, y=>2), ); $collection->insert($insertArr);
在插入一个对比数据,
$insertArr = array( "name" => "testname", "id" => 123455, "sid" => 123456, "arr" => (object)array('x'=>1, y=>2), );
与前面插入的不同的是,php在没有指定类型的情况下,前面一个sid会是string类型,后面一个会默认是int类型。
那么在db里面会形成两条记录如下
插入后,我们在做查询工作,查询脚本如下
//------数据库连接省略---- $query = array( "sid" => array('$gt' => 1), ); // $collection->find($query); $cursor = $collection->find($query); while ($cursor->hasNext()) { $res = $cursor->getNext(); }
查询中,会发现,只能查出一条数据,我们只能查出 "sid": 123456,而没有办法查出 "sid":"123456", 说明mongodb 会关注查询条件中的数据类型。而想要查出 "sid":"123456",可以用下面办法,php中强制指名查询条件的数据类型
$str = 1; $query = array( "id" => array('$gt' => (string)$str), ); // $collection->find($query); $cursor = $collection->find($query); while ($cursor->hasNext()) { $res = $cursor->getNext(); }