mongo学习笔记

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(); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值