MongoDB使用示例

本文探讨了MongoDB作为文档型数据库的优势,如存放复杂数据的便捷性,并举例说明了其在记录文章、评论、点赞和附件信息时的高效性。同时,文章指出在关系型数据库与MongoDB之间进行选择时,需要考虑查询效率和数据操作的复杂性。MongoDB在处理聚合查询和一次性获取多信息方面表现出色,但也提出了在使用过程中需要注意的问题,如数据新增、删除和修改的Java操作示例,以及如何进行投影查询以优化数据流量。
摘要由CSDN通过智能技术生成

优势说明

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值