mongo学习笔记
部分资料来自网上,自已根据学习整理补充了一下,如有侵权,联系本人。
学习链接:
http://www.open-open.com/lib/view/open1325589618718.html
分页查询:http://www.codesky.net/article/201101/166528.html
存放路径:
mv mongodb /usr/local/mongodb
mkdir /usr/local/mongodb/data
启动mongodb
/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data --fork --logpath=/usr/local/mongodb/dblogs(复制不行就敲)
echo"/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data">> /etc/rc.local (开机自启动)
/usr/local/mongodb/bin/mongod --auth--dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/dblogs –fork
--auth授权用户才可以登陆就学怎么用就行了,
进入客户端操作
u /usr/local/mongodb/bin/mongo (mongo命令)
退出shell控制台
u Ctrl+c 或 exit 回车
控制台中的基本操作命令
ü 如果想查看当前连接在哪个数据库下面,可以直接输入db
ü 查看用户列表 db.system.users.find();
ü 查看所有用户show users;
ü 查看所有数据库 show dbs;
ü 查看所有集合 show collections;
ü 删除当前的数据库 db.dropDatabase();
ü 删除collection db.集合名.drop();
ü 想知道mongodb支持哪些命令,可以直接输入help;
ü 想知道当前数据库支持哪些方法:db.help();
ü 想知道当前集合支持哪些方法:db.user.help(); user为集合名
ü 更多命令可以用帮助命令获得!
定义新的数据库名
use mydb
数据库基本操作:增查删改
db.users.insert({"_id":1,"name":"mongo"})
a={"name":"caida"} { "name" : "caida" }
> b={"age":24} { "age" : 24 }
> db.users.insert(a);
> db.users.save(b);
> db.users.find()
自己定义一个函数,来让它实现id自增
function counter(name) {
var ret = db.counters.findAndModify({query:{_id:name},
update:{$inc : {next:1}},"new":true, upsert:true});
return ret.next; }
db.users.insert({_id:counter("users"),name:"id1"}) // _id : 1
db.users.insert({_id:counter("users"),name:"id2"}) // _id : 2
删除数据
db.collname.remove({条件})(不写条件删除所有记录)
db.users.remove({"name":"caida"})
> db.users.find()
{ "_id" : 1, "name" :"mongo" }
{ "_id" : ObjectId("4eb2a199bf10550b2177b6f8"), "age" : 24 }
修改数据
db.collname.update({条件})
db.users.update({"_id":1},{"name":"nosql"})
> db.users.find()
{ "_id" : 1, "name" :"nosql" }
{ "_id" : ObjectId("4eb2a199bf10550b2177b6f8"), "age" : 24 }
用户授权:
这里得注意一下mongodb的用户授权的问题,不然用php连接登录是个大问题,首先要做的是在mongodb上做用户授权
一.js shell里的设置:
1../mongo
2.use admin
3.db.addUser("root","kkk"); #创建mongo超级用户root,密码为123456
4.db.auth("root","kkk"); #对root用户进行授权
5.use test
6.db.addUser("user1","kkk"); #创建test库的用户user1,密码为kkk
7.db.auth("user1","kkk"); #对user1用户进行授权
8./usr/local/mongodb/bin/mongod --auth--dbpath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/dblogs --fork
#启动mongod进程,此时带上--auth,只有授权的用户才登录
二.从js shell登录
/usr/local/mongodb/bin/mongo -u user1 -pkkk localhost:27017/test
10.登录后一定要授权db.auth("user1","kkk");
#此时如果用的是root即要登录到admin数据库中,而且授权后可以登录到操作所有的东西,而这里的user1只能操作test数据库
三.从php登录授权
$conn=newMongo("mongodb://user1:kkk@localhost:27017/test");
或
$conn=newMongo("mongodb://root:kkk@localhost:27017/admin");
#注意用php连接时用默认登录的是admin数据库
1、连接Mongo服务器
<?php
$conn = new Mongo();
#连接localhost:27017
$conn = new Mongo('localhost:22011');
#连接localhost:27017
$conn = new Mongo("mongodb://${username}:${password}@localhost:27017/blog");
#MongoDB有用户名密码并指定数据库blog
?>
2.指定数据库和数据集名(表名)‘
<?php
$db = $conn->blog;
#选择数据库blog
$collection = $db->users;
#制定结果集(表名:users)
?>
3、CRUD
<?php
#新增
$user = array('name' => 'caleng', 'email' => 'admin@admin.com');
$collection->insert($user);
#修改
$newdata = array('$set' => array("email" => "test@test.com"));
$collection->update(array("name" => "caleng"), $newdata);
#删除
$collection->remove(array('name'=>'caleng'), array("justOne" => true));
#查找
$cursor = $collection->find();
var_dump($cursor);
#查找一条
$user = $collection->findOne(array('name' => 'caleng'), array('email'));
var_dump($user);
?>
4.关闭连接
<?php
$conn->close();
?>
主键
系统很好的支持Mongo的主键类型,Mongo默认的主键名是 _id,也可以通过设置pk属性改变主键名称(也许你需要用其他字段作为数据表的主键),例如:
1. Class UserModel extends MongoModel {
2. Protected $pk = 'id';
3. }
条件查询:
一个简单的示例:
$query = array(’a'=>’hello’);
$coll->find($query);
查询该collection中所有a等于hello的记录。
也可以复合来做:
$query =array(’a'=>’hello’,'b’=>1);
$coll->find($query);
查询该collection中所有a等于hello并且b为1的记录。
关于大于和小于等查询条件:
$query = array(’a'=>’hello’,'b’=>array(’$gt’=>10));
$coll->find($query);
查询该collection中所有a等于hello并且b大于10的记录。
更多的大小比对为:$gt为大于、$gte为大于等于、$lt为小于、$lte为小于等于、$ne为不等于
只取$cursor = $articleCollection->find();$cursor->limit(10);//结果集只取10条mongoDB其实是分两步来做的,第一步用find()来获取符合条件的结果,第二步才是分页、排序、分组等等。
获得结果数量:
$cursor = $cull->find();
$count = $cursor->count();
排序:$cursor = $cull->find();
$cursor->sort(array('saved_at' => -1)) //按save_at字段降序排列,1为升序 分页获取结果集:
$cursor = $cull->find();
$cursor =$cursor->sort(array("a" => 1));
$cursor =$cursor->skip(10)->limit(20);
更新数据库$articleCollection->update(array('_id' => new MongoId($id)),$article);第一个参数为指定的条件(更新条件),第二个参数为要更新的对象还有可选参数如下;$collection->update($criteria, $newobj, array('safe' => True));safe=true时,等到UPDATE结束才返回结果
mongodb还支持upsert的操作:如果存在则更新,如果不存在则插入$users->update(array('email' => 'alice@wonderland.com'),
array('firstname' => 'Alice', 'lastname'=> 'Liddell'),
array('upsert' => True));
这里对email为alice@wonderland.com的记录进行更新其firstname,lastname字段的内容
修饰符比如set,只修改记录的某个部分,可以这样:$articles->update(array('_id' => MongoId('4dcd2abe5981')),array('$set' => array('title' => 'New Title')));
使用inc:$articles->update(array('_id' => MongoId('4dcd2abe5981')),array('$set' => array('content' => 'New Content'),
'$inc' => array('update_count' => 1))); 将update_count+1 unset:$articles->update(array('_id' => MongoId('4dcd2abe5981')),array('$unset' => array('title' => True))); 将title field从这个document中移除更名rename:$articles->update(array(),array('$rename' => array('saved_at' =>'created_at')),array('multiple' => True));将save_at更名为create_at
比如一个一对多的关系:比如一个文章下的评论:$comment = array(
'name' => $_POST['commenter_name'],
'email' => $_POST['commenter_email'],
'comment' => $_POST['comment'],
'posted_at' => new MongoDate());$collection->update(array('_id' => new MongoId($id)),array('$push' => array('comments' =>$comments)));
使用.号来查询子嵌套文档{name : "Gordon Freeman",address : {city : "Springfield",state : "Florida"}
}
? {name : "Lara Croft",address : {
city : "Miami",
state: "Florida"
}
} 则查询address中state为florida的document: $users->find(array('address.city' => 'Springfield',
'address.state' => 'Florida')); 删除记录$articleCollection->remove(array('_id' => new MongoId($id)));$movies->remove(array('genre' =>'drama'),array('justOne' => True));如果加了justOne的参数,则只删除符合条件的一条记录而已,其他不删除模糊查询:$regex= new MongoRegex("/^a/"); $where=array('ro'=>$regex);$cursor=$collection->find($where); $coll= $db->selectCollection('collname');
· $q = new MongoRegex("/word/");
· $cursor = $coll->find( array('field' => $q ));
· print $cursor->count();