php对mongo操作问题

  最近由于业务需求,需要使用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();

}

   

 

posted @ 2015-11-06 16:31  壹木人  阅读(354)  评论(0编辑  收藏  举报