您的位置:首页 > 数据库 > Mongodb

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

2014-03-07 17:09 344 查看
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));

/*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: