最近接触的东西比较杂,很痛苦,每个都只能了解到表面,但无法深究.MongoDB也是如此,现在只能突击学习一下了,笔记当然是不可少的.
首先说下mongoDB适用场景:
数据量大,写入操作频繁,数据价值较低 (如新浪微博的评论等数据)
这样的数据就不太适合使用redis了,
redis的特点是快,但它是单线程的,所以当数据量大的时候,性能会大大降低,
特点:
(1)面向集合存储,易于存储对象类型的数据
(2)模式自由
(3)支持动态查询
(4)支持完全索引,包含内部对象
(5)支持复制和故障恢复
(6)使用高效的二进制数据存储,包括大型对象(如视频等)
(7)自动处理碎片,以支持云计算层次的扩展性
(8)支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl 及 C++语言的驱动程 序,社区中也提供了对 Erlang 及.NET 等平台的驱动程序
(9) 文件存储格式为 BSON(一种 JSON 的扩展)
mongodb安装问题:
https://blog.youkuaiyun.com/let_me_tell_you/article/details/81239328
常用命令:
user 数据库名称 选择和创建数据库,如果数据库不存在则自动创建
db.集合名称.insert(data); 插入数据
db.集合名称.find() ; 查询所有,括号内可添加查询条件
db.集合名称.findOne(查询条件) 返回符合条件的第一条数据
db.集合名称.find().limit(num) num代表查询后返回结果的条数
db.集合名称.update(条件,修改后的数据) 修改文档,条件相当于查询条件,
举例:
将id为1的数据的username属性修改为yyy
(这个$符号有时候打不出来不知为啥,所以就截图了)
db.集合名称.remove(条件); 删除文档 ,可加条件
db.集合名称.count() 统计数据条数,可加条件
值得一提的是模糊查询:
mongodb模糊查询是通过正则表达式实现的,
db.集合名称.find({username:/y/}) 查询集合中username包含y的文档
db.集合名称.find({username:/^y/}) 查询集合中username以y开头的文档
db.集合名称.find({age:{$gt:18}}) 查询集合中年龄大于18的文档
同理还有
$lt: 小于
$gte:大于等于
$lte: 小于等于
$ne: 不等于
$in:包含
$nin: 不包含
$and:和,相当于sql的and 连接多个条件
$or: 或
$inc: 自增
使用
依赖
mongodb 驱动依赖
测试代码:
好了 新手学习到这里了,后续在实际场景使用中遇到问题再进行补充.
----------------------------------------------更新-----------------------------------------------------
mongodb的实际应用:
项目中要求将部分数据从数据库改为存入mongodb中,需要删除原来的mybatis中的xml,通过mongo来替代
- 注入mongotemplate
mongotemplate的各个操作:
增删改查就不多说了,主要说分组,排序,通过Aggregation实现,如下:
需要注意的是在Aggregation中必须将字段一一映射,否则是无法查询出相应字段的.
mongoTemplate.aggregate(agg, “库名”, entity.class).getMappedResults(); //查询结果集