mongodb详解
Posted -cyh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb详解相关的知识,希望对你有一定的参考价值。
一.Nosql数据库的优缺点:
优点:
简单的扩展
快速的读写
灵活的数据模型
缺点:
不提供对sql的支持
支持的特性不够丰富
产品不够成熟
二.mongodb的特性:面向文档存储的数据库,文档结构为bson
高性能,易部署,易使用,存储方便(BSON格式:二进制的json),高性能二进制存储(包括视频)
三.增删改查
mongodb结构:数据库,集合(表),json(数据),默认id自增(‘_id’)
插入:
insert:db.c1.insert({‘_id‘:1,name:‘cyh‘});
save: db.c1.save({‘_id:1,name:‘ss‘‘});
区别:默认id自增,但是如果插入id相同则insert会报错(主键冲突),save则会做更新操作。
删除:
db.c1.remove(); --删除所有
db.c1.remove({name:‘user1‘}) --删除user1的数据
查找:
db.c1.find() --查找所有
db.c1.find({name:‘user1‘}) --查找user1的数据
db.c1.find({age:24},{age:1}) --只返回c1表中age这一列(find中的第二个参数就是为了指明返回哪一列,为1代表返回某一列。不指定默认返回所有*)
db.c1.find({age:24},{age:1,_id:0}) --只返回c1表中age这一列(find中的第二个参数就是为了指明返回哪一列,为0代表不返回某一列)
条件表达式查找:
db.c1.find ( {‘ age ‘ : { $gt :5 } } ) -- 年龄大于5的数据:{$gt : value}
db.c1.find( {‘age‘ : { $lt : 5} } ) -- 年龄小于5的数据 :{$lt : value}
db.c1.find( { ‘age‘:{$gte: 5} } ) -- 年龄大于等于5 $gte
db.c1.find( { ‘age‘:{$lte: 5} } ) -- 年龄小于等于5 $gte
db.c1.find( { ‘age‘ : { $ne: 5 } } ) -- 年龄不等于5 $ne(not equal)
查找数据数量:
db.c1.count() = db.c1.find().count()
db.c1.sort({age:1}).skip(2).limit(3).count(1) --count(1)才能正常的过滤前面的参数,默认为0、
排序:
db.c1.sort({age:1}); -- age进行升序
db.c1.sort({age:-1}); -- age进行降序
限制:
db.c1.limit(4) -- 从0开始查找四个
db.c1.skip(1).limit(4) -- 跳过第一个往后找四个
db.c1.sort({age:1}).skip(2).limit(3) -- 有排序先排序再找结果集,不然数据可能有误差
数组包含:$all ,类似php 的in_array
db.c1.find({post_arr:{$all:[1,2,3]}}) -- 判断post数组中是否包含123
字段是否存在:$exists
db.c1.find({name:{$exists:1}}) -- 判断这个字段是否存在
取余: $mod
db.c1.find({age:{$mod:[2,1]}}) -- 查询年龄除2余1的
类似mysql的in和not in: $in ,$nin
db.c1.find({‘age‘:{$in:[1,3,5]}}) -- 查询年龄等于1 3 5 的年龄数据
db.c1.find({‘age‘ :{$nin:[1,3,5]}}) -- 查询年龄不等于1 3 5 的年龄数据
或连接:$or,$nor
db.c1.find({$or:{name:‘user1‘,age:‘30‘,sex:‘man‘}}) -- 查找名字为user1或年龄为30或性别为男的数据
db.c1.find({$nor:{name:‘user1‘,age:‘30‘,sex:‘man‘}}) -- 不查找名字为user1或年龄为30或性别为男的数据
正则表达式:
db.c1.find({name:/user/i}) -- 查找名称包含user的
类似mysql中的distinct:
db.c1.distinct(‘name‘);
匹配数组中的数组元素 : $elemMatch x.a, x.b
查找null:
db.c1.find({‘name‘:{$exsts:1,$in:[null]}}); -- 查找值为null的就得先去校验是否存在
db.c1.find(‘name‘:{$type:10}) -- type = 10代表 null
查询前后多少条:slice
db.post.find({},{comment:{$slice:5}}) -- 查找前5评论
db.post.find({},{comment:{$slice:-5}}) -- 查找后5条评论
db.post.find({},{comment:[20,10]}) -- skip 20,limit 10
db.post.find({},{comment:[-20,10]}) --20 from end,limit 10
以上是关于mongodb详解的主要内容,如果未能解决你的问题,请参考以下文章