mongodb与sql在查询上的区别

之前在“这个场景更适合使用NoSQL”文章中通过和SQL的对比 介绍了NOSQL数据存储结构的特点,一位朋友看后希望再介绍下NOSQL查询方面的特点 这里以NOSQL中比较典型的mongodb数据库为例,先从用法上看下mongodb的操作方式,以后会更深入的介绍mongodb查询方面的细节 下面从3个方面看下mongodb的查询方式 (1)简单查询 类似于sql的 select * from table; (2)条件查询 类似于sql的 select * from table where name='jones'; (2)嵌套文档查询 类似于sql的join,但由于mongodb支持文档内部嵌套子文档,所以嵌套文档查询非常简单 准备数据 为了执行查询操作,需要先向数据库插入几条数据 (1)选择目标数据库 和sql数据库一样,需要先选择目标数据库 > use tutorial 注意 我的mongodb中并没有 tutorial 这个数据库,但可以直接切换过去 这里和sql数据库有点不同,实际上,mongodb中创建数据库并不是必需的操作,数据库与集合只有在第一次插入文档时才会被创建 (2)插入数据 现在创建第一个文档 > db.users.insert({username: "smith"}) 在键入这行代码后会感觉到一丝延迟,这是因为 tutorial 数据库和 users 集合都还没在磁盘上创建出来,延迟是因为要为它们的初始化数据文件分配空间 再向集合中添加一个用户 > db.users.save({username:"jones"}) 查询数据 (1)简单查询 现在 users 集合中已经有两个数据了,我们把所有数据都查询出来 > db.users.find() 结果信息

{

"_id" : ObjectId("5620c919f1"),

"username" : "smith"

}

{

"_id" : ObjectId("562cececf5"),

"username" : "jones"

}

find 方法中没有任何参数,就表示获取所有内容 (2)条件查询 可以向find方法中传递一个查询选择器,来返回符合条件的文档 例如取得username值为jones的文档 > db.users.find({username:"jones"}) 结果信息

{

"_id" : ObjectId("5628cececf5"),

"username" : "jones"

}

(3)嵌套文档查询 需要先构造数据,给smith添加一个喜好信息,喜好中包含电影信息

> db.users.update(

{username:"smith"},

{$set:{favorites: {movies:["spring","love"]} }}

)

现在看下集合中的文档结构 > db.users.find() 结果为: { "_id": ObjectId("56419f1"), "username": "smith", "favorites": { "movies": ["spring", "love"] } } { "_id": ObjectId("562ecf5"), "username": "jones" } 可以看到 favorites 是一个内嵌文档 现在想查询出谁喜欢"love"这部电影,应该如何查询? > db.users.find({"favorites.movies":"love"}) 这样就可以找出movies中包含"love"的文档 favorites 和 movies 之间的 点 告诉查询引擎应找一个名为favorites的键,它指向一个对象(该对象有一个名为movies的内部键),然后匹配它的值 ---- 通过上面的小例子,简单的了解了mongodb的数据库操作方式,给我的感觉是,这种方式对于程序员更加自然,易于接受,完全是按照程序的思路来操作,学习成本很低

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-10-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python中文社区

基于Sanic的微服务基础架构

介绍 使用python做web开发面临的一个最大的问题就是性能,在解决C10K问题上显的有点吃力。有些异步框架Tornado、Twisted、Gevent 等就...

1.7K70
来自专栏雪胖纸的玩蛇日常

54.1 怎样才算学会django? 知道这28个知识点才算会django2

25750
来自专栏Golang语言社区

一个go语言实现的短链接服务

一个go语言实现的短链接服务 首先,博客转移到 wusay.org 了,去年没交费,博客都没了。。。刚刚恢复过来,以前的文章没了,慢慢补吧。 什么是短链接服务 ...

690100
来自专栏李家的小酒馆

Hiberante知识点梳理

Hibernate简介 Hibernat是一个ORM(关系映射)框架,对JDBC访问数据库的操作进行了简化,并且将数据库表中的字段和关系映射为对象,简化了对数据...

20700
来自专栏Python中文社区

Python开源项目推荐:跨平台批量运维小工具batch_ops

batch_ops是一个用Python实现的跨平台批量运维小工具。通过它可以执行远程命令/上传下载文件。它基于yaml配置文件可灵活指定操作单位:host(s)...

17630
来自专栏腾讯数据库技术

谁在攻击我的数据库?审计功能大揭密

69020
来自专栏Golang

influxdb 简介与实现(一)

InfluxDB是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及执行分析。

32840
来自专栏电光石火

springboot整合websocket实现消息推送

69330
来自专栏数据小魔方

MySQL基础入门——MySQL与R语言、Python交互

MySQL作为z最为流行的关系型数据库管理平台之一,与绝大多数数据分析工具或者编程语言都有接口,今天这一篇分享如何将MySQL与R语言、Python进行连接。 ...

41880
来自专栏网站漏洞修补

mysql防止网站被sql注入攻击 的3种方法

mysql数据库一直以来都遭受到sql注入攻击的影响,很多网站,包括目前的PC端以及手机端都在使用php+mysql数据库这种架构,大多数网站受到的攻击都是与s...

62080

扫码关注云+社区

领取腾讯云代金券