MongoDB学习笔记[持续更新中...]

来源:互联网 发布:网络百家家乐能玩吗? 编辑:程序博客网 时间:2024/05/11 17:25
MongoDB学习笔记


$m = Yii::app()->mongodb;


1、插入数据:


插入操作(向user表中插入数据) 注:如果user表不设置唯一索引
$m->insert('user', array('id'=>20,'username'=>'liangpz521','email'=>'liangpz521@163.com'));


另一种数据格式
$m->insert('user', array('id'=>20,'username'=>'liangpz521','attributes'=>array('age'=>20,'sex'=>'Mr','birthday'=>'1982-10-30')));




2、查找数据
$m->findOne('user',array('id'=>20));
$m->findOne('test_table', array('attributes.sex'=>'Mr'),array('id')); //只查询id 第三个参数表示要查询的字段




3、更新数据


//全部更新数据 数据存在时更新 不存在时直接添加
$m->update('user',array('id'=>20),array('usernmae'=>'eboss'); //这样的修改会id=1的数据替换成字段只有username


如果数据中有多个字段,但修改时只想修改一个字段 那么就要用到$set了


$m->update('user',array('id'=>20),array('$set'=>array('username'=>'eboss')));//只修改username 其它字段都存在
$m->update('user', array('id'=>20),array('$set'=>array('attributes.age'=>30));






4、$set修改器用法
就是相当于sql的set field = value,全部数据类型都支持$set。例:
//如果没有sex属性 则添加,有的话刚更新,修改时不用$修改器整个文档将被替换
$m->update("test_table", array("id"=>20),array('$set'=>array("attributes.sex"=>'Mr')));


5、$unset修改器
//如果要删除一个或多个已有了字段或属性可以用unset
$m->update("test_table", array("id"=>20),array('$set'=>array("attributes.sex"=>'Mr')));


6.$inc修改器
//此修改器只用于整数,正整数和双精浮点数的增加或减少 例如:更新浏览量时(增加)或扣除积分时(减少)


$m->update("test_table", array("id"=>20),array('$inc'=>array("attributes.hits"=>1)));//增加 (因初始时无此字段,所以会自动添加)
$m->update("test_table", array("id"=>20),array('$inc'=>array("attributes.hits"=>10)));//执行之后 hits变成11


$m->update("test_table", array("id"=>20),array('$inc'=>array("attributes.hits"=>-1)));//减少


7.$push用法
把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去。例:


//$m->update('test_table', array('itemid'=>20),array('title'=>'开发语言有哪些?','comments'=>array());
$comment = array('author'=>'china','lang'=>'ruby','date'=>'2014-02-05');
$m->update('test_table',array('itemid'=>20),array('$push'=>array('comments'=>$comment)));//每次追加一条评论 其它属性不变




8、$ne修改器
如果有这种情况:一个人只允许只允许评论一次,那么我们在添加新的评论时,就需要判断要添加的评论是否已经存在了。
$ne修改器就是判断是否不存在某条记录,不存在的时候才执行某个操作。
接着上面的例子,我们先查看,评论中没有lisi的评论的话,我们就插入一条新的lisi的评论:


db.blog.update({"itemid":"20","comments.author":{"$ne":"china"}},{"$push":{"comments":{"name":"author","lang":"java","date":"2014-02-05"}}});


php代码实例
$comment = array('author'=>'china','lang'=>'javascript');
$m->update('test_table',array('itemid'=>20),array('comments.author'=>array('$ne'=>'china'),'$push'=>array('comment'=>$comment)));
现在,如果我们再次执行上面的update代码,就不会再添加china的评论了。这里我们就不再演示了。


8、$addToSet修改器
这个修改器其实做的就是上面一样的事情。
它会自动的判断某个键是否存在重复的值。不存在才添加记录。现在如果有一个关于用户信息的文档如下:
$m->insert('user',array('name'=>'china','email'=>array('liangpz521@163.com','pzliang@163.com')));
$m->update('user',array('name'=>'china'),array('$addToSet'=>array('email'=>'liangpz521@163.com')));
执行update后 liangpz521@163.com此邮箱不会添加的email列表中(因为列表中已存在此邮箱)








8.upsert用法(更新时用)
默认时为false
$m->update('user',array('record'=>28),array('$inc'=>array('record'=>3)),array('upsert'=>false));
等价于
$m->update('user',array('record'=>28),array('$inc'=>array('record'=>3)));


当为false时 查找分数是28的 然后把这个分数增加3
当为true时,查询不到时自动向表中添加一条分数是31的数据(增加3后) 每运行一回就会添加一条信息(会有很多重复信息)


































/** 删除指定MongoId **/
$id = new MongoId(“4d638ea1d549a02801000011″);
$collection->remove(array(‘_id'=>(object)$id));
/*
0 0
原创粉丝点击