1:首先需要去安装对应版本的mongoDB php扩展dll文件,开扩展,重启apache
这个可以去php官网找找,可以去php手册看看mongoDB函数,里面安装和函数使用的介绍,
2:
Mongo 配置选项
名字 默认 可修改范围 描述
mongo.default_host "localhost" PHP_INI_ALL
mongo.default_port 27017 PHP_INI_ALL 默认连接端口
mongo.auto_reconnect true PHP_INI_SYSTEM 是否在丢失连接的时候重新连接
mongo.allow_persistent true PHP_INI_SYSTEM 是否支持持久连接
mongo.chunk_size 262144 PHP_INI_SYSTEM 每块的大小,至少100bytes,最大4 megabytes
mongo.cmd "$" PHP_INI_ALL 在非同一类型比较时代替$
mongo.utf8 "1" PHP_INI_ALL 1.1.0版本后此选项将淘汰
一般连接
$connection = new Mongo(); // connects to localhost:27017
$connection = new Mongo( "example.com" );
$connection = new Mongo( "example.com:65432" );
$connection ->close();关闭连接
$connection = new Mongo(); // connects to localhost:27017
$connection = new Mongo( "example.com" );
$connection = new Mongo( "example.com:65432" );
$connection ->close();关闭连接
给库添加账号密码验证
$m = new Mongo();
$db = $m->admin;
$db->authenticate($username, $password);
$m = new Mongo();
$db = $m->admin;
$db->authenticate($username, $password);
其它连接方式
$m = new Mongo("mongodb://${username}:${password}@localhost:port");
//默认端口连上blog库
$m = new Mongo("mongodb://${username}:${password}@localhost/blog");
//连接到mongo和其副本上
$m = new Mongo("mongodb://localhost:27017,localhost:27018");
$m = new Mongo("mongodb://${username}:${password}@localhost:port");
//默认端口连上blog库
$m = new Mongo("mongodb://${username}:${password}@localhost/blog");
//连接到mongo和其副本上
$m = new Mongo("mongodb://localhost:27017,localhost:27018");
长连接,如下:x为任意标示字符,
$m = new Mongo("localhost:27017", array("persist" => "x"));
$m = new Mongo("localhost:27017", array("persist" => "x"));
1000次短连接耗时18s,而长连接,只需要0.02秒,
socket连接方式,这个我没试验成功,应该只针对linux
$m = new Mongo("mongodb:///tmp/mongo-27017.sock");
$m = new Mongo("mongodb://username:password@/tmp/mongo-27017.sock:0/foo");
$m = new Mongo("mongodb:///tmp/mongo-27017.sock");
$m = new Mongo("mongodb://username:password@/tmp/mongo-27017.sock:0/foo");
2:选着数据库
$db = $connection->dbname;//如果库不存在,会自己建立一个
$db = $connection->dbname;//如果库不存在,会自己建立一个
3:选择collection
$collection = $db->foobar;//两种方法,如下。同理,不存在的话会新建
$collection = $connection->baz->foobar;
$collection = $db->foobar;//两种方法,如下。同理,不存在的话会新建
$collection = $connection->baz->foobar;
4:添加数据
$data = array("name" => "lxh","info" => "lxh info");
$collection->insert($data); 采用关联数组,
$data = array("name" => "lxh","info" => "lxh info");
$collection->insert($data); 采用关联数组,
5:查找数据
$result = $collection->findOne(); //查找一条
$cursor = $collection->find(); //查找所有
$result = $collection->findOne(); //查找一条
$cursor = $collection->find(); //查找所有
他们都可以带参数,参数为关联数组,如下:
$query = array( "i" => 71 ); //多个条件,在数组中添加即可
$cursor = $collection->find( $query );
$query = array( "i" => 71 ); //多个条件,在数组中添加即可
$cursor = $collection->find( $query );
6:条件编写
多个条件,在数组中添加即可
$query = array( "i" => 71,"name" => "lxh" );
$query = array( "i" => 71,"name" => "lxh" );
不等条件,大于,小于,大于等于,小于等于
$query = array( "id" => array( '$gt' => 50 ) );//查找id大于50的数据
$query = array(
"i" => array( "\$gt" => 20, "\$lte" => 30 )
);
//20 < i <= 30 大于等于估计用"\$gte"了,猜一下
$cursor = $coll->find( $query );
$query = array( "id" => array( '$gt' => 50 ) );//查找id大于50的数据
$query = array(
"i" => array( "\$gt" => 20, "\$lte" => 30 )
);
//20 < i <= 30 大于等于估计用"\$gte"了,猜一下
$cursor = $coll->find( $query );
为躲避$,我们可以在php.ini中设定 mongo.cmd = ":" 用:代替$
7:计数
echo $collection->count();
echo $collection->count();
8:遍历结果
$cursor = $collection->find( $query );
//遍历结果,或用简单的遍历数组的方法
while( $cursor->hasNext() ) {
var_dump( $cursor->getNext() );
}
$cursor = $collection->find( $query );
//遍历结果,或用简单的遍历数组的方法
while( $cursor->hasNext() ) {
var_dump( $cursor->getNext() );
}
9:创建索引
$collection->ensureIndex( array( "i" => 1 ) ); //i递增索引
$collection->ensureIndex( array( "i" => -1, "j" => 1 ) );
// i递减索引,j递增索引
$collection->ensureIndex( array( "i" => 1 ) ); //i递增索引
$collection->ensureIndex( array( "i" => -1, "j" => 1 ) );
// i递减索引,j递增索引
10:其它
利用添加返回的"_id"
$person = array("name" => "joe");
$people->insert($person);
$joe = $people->findOne(array("_id" => $person['_id']));
$person = array("name" => "joe");
$people->insert($person);
$joe = $people->findOne(array("_id" => $person['_id']));
_id是mongoid。最常见的错误是attepting使用一个字符串匹配mongoid
$person = array("name" => "joe");
$people->insert($person);
$pid = $person['_id'] . "";
// 这样做是错误的
$joe = $people->findOne(array("_id" => $pid));
$person = array("name" => "joe");
$people->insert($person);
$pid = $person['_id'] . "";
// 这样做是错误的
$joe = $people->findOne(array("_id" => $pid));
//保存
$collection->save(array("awards" => array("gold", "silver", "bronze")));
$collection->save(array("awards" => array("gold", "silver", "bronze")));
awards列,保存一个数组{ "_id" : ObjectId("4b06c282edb87a281e09dad9"), "awards" : ["gold", "silver", "bronze"]}
忽视awards是数组,条件查询
$cursor = $collection->find(array("awards" => "gold"));
$cursor = $collection->find(array("awards" => "gold"));
{
"_id" : ObjectId("4b06c282edb87a281e09dad9"),
"awards" :
[
{
"first place" : "gold"
},
{
"second place" : "silver"
},
{
"third place" : "bronze"
}
]
}
如果是此类,查询如下:
$cursor = $collection->find(array("awards.first place" => "gold"));
//in 查询 gold or copper
$cursor = $collection->find(array("awards" => array('$in' => array("gold", "copper"))));
$collection->save( array("gold", "silver", "bronze"));
$cursor = $collection->find(array("awards.first place" => "gold"));
//in 查询 gold or copper
$cursor = $collection->find(array("awards" => array('$in' => array("gold", "copper"))));
$collection->save( array("gold", "silver", "bronze"));
0列silver,1列 bronze
修改
$collection->update(
array("name" => "dfd"), //修改查询条件
array('$set' => array('sex' => "aim")),
array('multiple'=>true) //更改多行,否则只改一行
);
$collection->update(
array("name" => "dfd"), //修改查询条件
array('$set' => array('sex' => "aim")),
array('multiple'=>true) //更改多行,否则只改一行
);
{
"_id" : ObjectId("4b06c282edb87a281e09dad9"),
"content" : "this is a blog post.",
"comments" :
[
{
"author" : "Mike",
"comment" : "I think that blah blah blah...",
},
{
"author" : "John",
"comment" : "I disagree."
}
]
}
//知道索引
$blog->update($criteria, array('$set' => array("comments.1" => array("author" => "Jim"))));
//如果不知道 索引,可以用$代替
$blog->update(
array("comments.author" => "John"),
array('$set' => array('comments.$.author' => "Jim")));
//知道索引
$blog->update($criteria, array('$set' => array("comments.1" => array("author" => "Jim"))));
//如果不知道 索引,可以用$代替
$blog->update(
array("comments.author" => "John"),
array('$set' => array('comments.$.author' => "Jim")));