设为首页 收藏本站
查看: 908|回复: 0

[经验分享] 第二部分 Mongodb增删改查

[复制链接]

尚未签到

发表于 2015-7-7 10:22:06 | 显示全部楼层 |阅读模式
  学习内容:
1.mongodb增加操作
2.mongodb删除操作
3.mongodb查询操作
增删改查的高级应用
Capped Collection(固定集合)
GridFS  大文件上传或下载
  1: insert
MongoDB是面向文档存储的数据库,文档结构形式叫BSON(类似JSON)
db.c1.insert({name:"user1"});
db.c1.save({_id:1, name:"user1"}); //save()如果已经存在就不会插入,如果不存在就插入
//这里要与id相同的值才不会被插入
//save就是id相同就更新,没有相同id就插入
  删除
db.c1.remove();
db.c1.remove({name:"user1"});
  db.c1.find({name:"user1"},{name:1, age:1, _id:0});
条件表达式
<  >= !=
$gt: 大于
$lt: 小于
$gte: 大于等于
$lte: 小于等于
$ne:  不等于
  
统计:
db.c1.count();
db.c1.find().count();
//count(1); 里面有一个条件,如果为1,那么会取条件,如果为0不会理会条件语句
  
排序:
db.c1.find().sort(age:1); //1是升序 0是降序
  取多少个
db.c1.find().limit(4);
  跳过几个
db.c1.skip(1);
db.c1.skip(0).limit(10).sort({age:-1});
  $all
操作类似于$in操作,但是不同的是,$all操作要求数组里面的值全部是包含在返回的记录里面
db.c2.find({post:{$all:[1,2,3]}});
  $exists
操作检查一个字段是否存在
db.c2.find({age:{$exists:1}}); 测试一个字段是否存在
  $mod
操作可以让我们简单的进行取模操作,而不需要用到where子句
//这里的是字段值的取余操作
db.c1.find({age:{$mod:[2]}});
  
$in 操作类似于传统关系数据库中的IN
db.c1.find({age:{$in:[1,2,3]}})
  $nin 与$in相反
db.c1.find({age:{$nin:[2,3,4]}});
  
$or 查看指定多个条件的记录,跟sql的or差不多
db.c1.find({$or:[{name:"user1"},{name:"user2"},{age:10}]});
  $nor 与$or相反过滤指定的条件
db.c1.find({$nor:[{name:"user1"},{name:"user2"},{age:10}]});
  
  学习内容:
1.mongodb增加操作
2.mongodb删除操作
3.mongodb查询操作
增删改查的高级应用
Capped Collection(固定集合)
GridFS  大文件上传或下载
  1: insert
MongoDB是面向文档存储的数据库,文档结构形式叫BSON(类似JSON)
db.c1.insert({name:"user1"});
db.c1.save({_id:1, name:"user1"}); //save()如果已经存在就不会插入,如果不存在就插入
//这里要与id相同的值才不会被插入
//save就是id相同就更新,没有相同id就插入
  删除
db.c1.remove();
db.c1.remove({name:"user1"});
  db.c1.find({name:"user1"},{name:1, age:1, _id:0});
条件表达式
<  >= !=
$gt: 大于
$lt: 小于
$gte: 大于等于
$lte: 小于等于
$ne:  不等于
  
统计:
db.c1.count();
db.c1.find().count();
//count(1); 里面有一个条件,如果为1,那么会取条件,如果为0不会理会条件语句
  
排序:
db.c1.find().sort(age:1); //1是升序 0是降序
  取多少个
db.c1.find().limit(4);
  跳过几个
db.c1.skip(1);
db.c1.skip(0).limit(10).sort({age:-1});
  $all
操作类似于$in操作,但是不同的是,$all操作要求数组里面的值全部是包含在返回的记录里面
db.c2.find({post:{$all:[1,2,3]}});
  $exists
操作检查一个字段是否存在
db.c2.find({age:{$exists:1}}); 测试一个字段是否存在
  $mod
操作可以让我们简单的进行取模操作,而不需要用到where子句
//这里的是字段值的取余操作
db.c1.find({age:{$mod:[2]}});
  
$in 操作类似于传统关系数据库中的IN
db.c1.find({age:{$in:[1,2,3]}})
  $nin 与$in相反
db.c1.find({age:{$nin:[2,3,4]}});
  
$or 查看指定多个条件的记录,跟sql的or差不多
db.c1.find({$or:[{name:"user1"},{name:"user2"},{age:10}]});
  $nor 与$or相反过滤指定的条件
db.c1.find({$nor:[{name:"user1"},{name:"user2"},{age:10}]});
  $size
操作将会查询数组长度等于输入参数的数组
  $elemMatch 元素配置的意思
  
slaveOk
当我们在replica set进行检索操作时,默认的路由会选择master机器,当我们需要针对任意的从机进行查询的时候,我们需要开启slaveOk选项。当我们在没有开启salveOk选项的时候,如果进行此操作会报如下错: *** not master and slaveok=false
所以我们要进行如下操作: rs.slaveOk(); // enable querying a secondary db.users.find(...)
  
11) Cursors游标及Cursor Methods
遍历游标
var x = db.c1.find();
x.next();
x.hasNext();
while(x.hasNext() == true){
x.next();
}
  
NULL查询(有一个值是为null,或者一个值不存在)
db.c4.find({age:null}); //列出所有为null或者不存在的值
db.c4.find({age:{$type:10}}); //列出所有为null的数据
  第二种写法
db.c4.find({age:{$exists:1, $in:[null]}});
//两个条件,一个是exists必须存在,二是为null的数据
  $slice
  4. Update
1) 语法 db.collection.update( criteria, objNew, upsert, multi )
参数说明: Criteria:用于设置查询条件的对象 Objnew:用于设置更新内容的对象 Upsert:如果记录已经存在,更新它,否则新增一个记录 Multi:如果有多个符合条件的记录,全部更新 注意:默认情况下,只会更新第一个符合条件的记录
  $set //修改字段  
db.c5.update({name:"user1"},{$set:{age:10}},0,1);
  $inc    //对字段进行加 a = a+1
db.c5.update({},{$inc:{age:-10}},0,1);
  $unset  //删除一个字段
db.c5.update({},{$unset:{age:1}});
  $push
db.c5.update({},{$push:{arr:1}}); //压入一个值进入数组
  
$pushAll
db.c5.update({}, {$pushAll:{arr:[2,3,4]}}); //压入多个值进入数组
  $pop
db.c5.update({}, {$pop:{arr:1}}); //弹出数组中的最后一个元素
db.c5.update({}, {$pop:{arr:1}}); //弹出数组中的第一个元素
  $addToSet
语句: {$addToSet: {field: value}}
如果filed是一个已经存在的数组,并且value值不在其中,那么value加入到数组中
filed不存在,那么把value当成一个数组存储到filed中
filed是一个已经存在的非数组类型,那么将会报错
  扩展肜户
{$addToSet:{a:{$each:[1,2,3,4,5,6]}}};
  $pull
语法:{$pull:{field:_value}}
功能: 如果field是一个数组,那么删除符合_value检索条件的记录
如果field是一个已经存在的非数组,那么会报错
  $pullAll
语法: {$pullAll:{field:value_array}}
功能: 同$pull类似,只是value的数据类型是一个数组
  $rename
语法:{$rename:{old_field_name: new_field_name}}
功能:重命名指定的字段名称
  特殊操作符:$
$操作符代码查询记录中第一个匹配条件的记录项
$db.c5.update({"arr.title":"linx"}, {$set:{arr.$.title:"I lover linx"}});
  注意: 在数组中用$配合$unset操作符的时候,效果不是删除的元素,而是把匹配的元素变成null
$db.c5.update({"arr.title":"php"},{$unset:{arr.$:1}});
  
var x = db.c1.findOne({"user":"user1"});
x.age = 40;
x.nickname="xlc";
db.c1.save(x);
  
性能监控
通过对数据库的性能监控,能够更好的了解数据库的工作状态,从页进行优化
介绍几个性能监控的工具
Mongofniff
此工具可以从底层监控到底有那些命讼发送给MongoDB去执行
./mongosniff --soruce NET lo
它是实时动态监视的,需要打开中一个客户端进行命讼操作,可以将这些数据输出到一个日志文件中,那么就可以保留下所有数据库操作的历史记录,对于后期的性能分析和安全审计工作将是一个巨大的贡献
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84036-1-1.html 上篇帖子: mongodb/mapreduce 下篇帖子: mongodb分页优化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表