MongoDB使用示例

优势说明

mongoDB作为文档型数据库,比关系型数据库更加擅长存放复杂类型的数据。关系型数据库在定义表结构时三范式要求每一个单元格数据表示的信息是不可以再分割的。而mongoDB则是运行集合下的属性可以是一个数据项一个对象或者是一个数组。

使用场景

用关系型数据库来记录(文章,评论,点赞信息,文章附件)信息时我们需要建立四张表来维持它们之间的关系。分别是文章表,评论表,点赞表,附件表,其中评论表、点赞表和附件表都持有文章表主键。而使用mongoDB时我们只需要一个文章集合就可以,这个集合包括,文章内容属性,文章发表时间属性,文件状态属性,评论数组属性,点赞数组属性,文章附件数组属性。

这样的系统通常的操作是先查询文章列表,再根据用户选择查询某一篇文章的详细信息,详细信息中包括文章内容,附件,点赞信息和评论信息。这样的需要使用关系型数据库也可以很好地胜任,只是在查询详细信息时使用关联从四个表中获取数据。但是我们如果把需求再提升一下,我们需要在文章列表中就展示文章内容、评论、附件和点赞信息,这样的需要也是存在的,比如微信的朋友圈就是这样。这是使用关系型数据库就有些不那么方便了,需要先从文章表中查询出文章列表,在根据每一个文章的主键到其他表中获取信息。这时如果列表要求显示10条记录,就需要执行11次的sql语句。而在这样的需求下mongoDB任然是只需要执行一次查询就可以获取到全部数据。

需要克服的问题

大部分的同行对关系型数据使用的熟练度大大地高于mongoDB的熟练度,所有在使用mongoDB开发以上需要的系统时,需要克服以下几个问题。

新增数据

使用脚本操作

db.message.insert({
	"_id" : 5.0,
	"content" : "心情超级很好,这是美好的一天。。。",
	"createTime" : ISODate("2018-05-24T12:45:43.302+08:00"),
	"userName" : "caifu",
	"attachments" : [
		{
			"url" : "http://test123/123.jpg",
			"name" : "123.jpg"
		},
		{
        	"url" : "http://test123/1234.jpg",
        	"name" : "1234.jpg"
		}
	]

})

使用JAVA操作

import org.springframework.data.mongodb.core.MongoTemplate;

mongoTemplate.insert(message,"message");
向文章中添加评论

使用脚本操作

db.message.update( 
{ _id: 5 }, 
{ $addToSet: { comments: {
            "_id":"123245",
			"user" : "cai",
			"createTime" : ISODate("2018-05-29T10:32:46.209+08:00"),
			"content":"一起出去玩呀",
			"status":0	
		} } } 
)

使用JAVA操作

import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import o
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值