`
pany
  • 浏览: 88104 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

NoSQL MongoDB语法

阅读更多

写在前面

本文是由一次演讲整理出来的,文中大部分资料来源于网络,感谢Wikipedia,Google和MongoDB官网。文中使用的MongoDB版本为1.2.4。


What is NoSQL

NoSQL一词首先是Carlo Strozzi在1998年提出来的,指的是他开发的一个没有SQL功能,轻量级的,开源的关系型数据库。注意,这个定义跟我们现在对NoSQL的定义有很大的区别,它确确实实字如其名,指的就是“没有SQL”的数据库。不过,NoSQL的发展慢慢偏离了初衷,Carlo Strozzi也发觉,其实我们要的不是"no sql",而应该是"no relational",也就是我们现在常说的非关系型数据库了。

2009年初,Johan Oskarsson举办了一场关于开源分布式数据库的讨论,Eric Evans在这次讨论中再次提出了NoSQL一词,用于指代那些非关系型的,分布式的,且一般不保证遵循ACID原则的数据储存系统的出现和兴起。 Eric Evans使用NoSQL这个词,并不是因为字面上的“没有SQL”的意思,他只是觉得很多经典的关系型数据库名字都叫"**SQL"(例如 MySQL,MS SQL,PostgreSQL),所以为了表示跟这些关系型数据库在定位上的截然不同,就用了"NoSQL"一词。

Wikipedia上对NoSQL的定义是这样的:NoSQL 是一项运动,这个运动推动了广义定义的非关系型数据储存系统的发展,并破除了长久以来关系型数据库一家独大的局面。论文和研究中一般将这些数据库称为结构化储存系统 。


为什么NoSQL变得流行

robbin的一篇文章(为什么要用非关系数据库? )很好地讨论了这个问题,这里只列出几个要点。

对数据库的“三高”需求
-- 高并发读写
-- 对海量数据的高效率读写
-- 高扩展性和高可用性

关系型数据库的特性地位下降
-- 事务一致性
-- 读写实时性
-- 复杂SQL,特别是多表关联查询


What is MongoDB

MongoDB 是一个面向文档的数据库系统。使用C++编写,不支持SQL,但有自己功能强大的查询语法。MongoDB使用BSON作为数据存储和传输的格式。BSON是一种类似JSON的二进制序列化文档,支持嵌套对象和数组。MongoDB很像MySQL,document对应MySQL的row,collection对应MySQL的table。



MongoDB在Windows上的安装运行很方便。直接下载、解压,然后运行 bin/mongod 即可启动服务器,运行 bin/mongo 即可运行命令行客户端。更多关于MongoDB的运行看这里 。MongoDB命令行客户端的脚本语法有些类似MySQL的:
Js代码  收藏代码

    show dbs // 列出所有数据库 
    use memo // 使用数据库memo。即使这个数据库不存在也可以执行,但该数据库不会立刻被新建,要等到执行了insert之类的操作时,才会建立这个数据库 
    show collections // 列出当前数据库的collections 
    db // 显示当前数据库 
    show users // 列出用户 



MongoDB的查询语法很强大。例如,很多SQL可以做的,它都可以做:
Js代码  收藏代码

    coll.find() // select * from coll 
    coll.find().limit(10) // select * from coll limit 10 
    coll.find().sort({x:1}) // select * from coll order by x asc 
    coll.find().sort({x:1}).skip(5).limit(10) // select * from coll order by x asc limit 5, 10 
    coll.find({x:10}) // select * from coll where x = 10 
    coll.find({x: {$lt:10}}) // select * from coll where x <= 10 
    coll.find({}, {y:true}) // select y from coll 



一些SQL不能做的,MongoDB也可以做:
Js代码  收藏代码

    coll.find({"address.city":"gz"}) // 搜索嵌套文档address中city值为gz的记录 
    coll.find({likes:"math"}) // 搜索数组 
    coll.ensureIndex({"address.city":1}) // 在嵌套文档的字段上建索引 



索引:
Js代码  收藏代码

    coll.ensureIndex({productid:1}) // 在productid上建立普通索引 
    coll.ensureIndex({district:1, plate:1}) // 多字段索引 
    coll.ensureIndex({productid:1}, {unique:true}) // 唯一索引 
    coll.ensureIndex({productid:1}, {unique:true, dropDups:true|) // 建索引时,如果遇到索引字段值已经出现过的情况,则删除重复记录 
    coll.getIndexes() // 查看索引 
    coll.dropIndex({productid:1}) // 删除单个索引 



安全与认证(该版本的MongoDB仅支持很基本的安全策略):
Js代码  收藏代码

    use shine // 如果要root权限,就用admin库 
    db.addUser("username", "password") // 普通权限,可读写 
    db.addUser("username", "password", true)  // 只可读,不可写 
    db.system.users.remove({user: username}) // 删除用户 



数据导出、导入:
Js代码  收藏代码

    // json或csv格式,每次一个collection 
    mongoexport -d producttrade -c basic -o /home/data/mongo_backup/producttrade_100504.json 
    mongoimport -d producttrade -c basic --drop /home/data/mongo_backup/producttrade_100504.json 
     
    // 二进制数据格式,常用于备份、还原 
    mongodump -d shine -o /home/data/mongo_backup 
    mongorestore -d shine --drop /home/data/mongo_backup/shine 


MongoDB in Java

到这里 下一个MongoDB的Java驱动,把jar包扔到项目里去就行了。上面提到的通过脚本操作的功能,基本上都能在Java中找到实现。进行数据库连接的代码也十分简洁:
Java代码  收藏代码

    Mongo mongo = new Mongo(); 
    db = mongo.getDB("shine"); 
    coll = db.getCollection("producttrade"); 
    DBCursor cur = coll.find(); 
    // 对cur进行操作。。。 


啰啰嗦嗦

    每个BSON对象大小不能超过4MB。MongoDB使用GridFS 来储存大文件。
    字段名限制:不能以"$"开头;不能包含".";"_id"是系统保留的字段,但用户可以自己储存唯一性的数据在字段中。
    MongoDB为每个数据库分配一系列文件。每个数据文件都会被预分配一个大小,第一个文件名字为".0",大小为64MB,第二个文件".1"为128MB,依此类推,文件大小上限为2GB。
    MongoDB没有新建数据库或者collection的命令,只要进行insert或其它操作,MongoDB就会自动帮你建立数据库和collection。当查询一个不存在的collection时也不会出错,Mongo会认为那是一个空的collection。
    一个对象被插入到数据库中时,如果它没有ID,会自动生成一个"_id"字段,为24位16进制数。
    Java中,Mongo对象是线程安全的,一个应用中应该只使用一个Mongo对象。Mongo对象会自动维护一个连接池,默认连接数为10。

 

分享到:
评论

相关推荐

    Mongodb语法使用说明(含详细示例)

    虽然MongoDB本质上是一个面向文档的NoSQL数据库,但通过使用一些扩展和工具,我们仍然可以使用类似SQL的语法来执行常见的数据库操作。 文章通过丰富的示例和说明,展示了如何在MongoDB中执行基本的增删改查操作。...

    MONGOdb视频教程地址.txt

    1.1、-nosql与MongoDB.mp4 1.2、-MongoDB安装配置.mp4 1.3、-MongoDB?shell详.mp4 1.4、-MongoDB文档、集合、数据库的概念.mp4 1.5、-MongoDB数据类型.mp4 123.txt 2.1、_MongoDB增、删、改文档】.mp4 2.2、...

    mongodb从基础到深入到集群部署

    从nosql到mongodb与mysql语法的对比,以及mongodb的shard及replia

    mongodb-4.0.3-rpm 安装包下载

    MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 来自 CSDN_华仔 的CSDN 博客 ,全文地址请...

    MongoDB-4.0.2_Win64 CSDN下载

    MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 来自 CSDN_华仔 的CSDN 博客 ,全文地址...

    mongodb资料大全

    mongorestore.exe -d test -c t_sysusers D:\Cloud\NoSql\mongodb2\data\backup\test\t_sysusers.bson //恢复数据库test中的表t_sysusers的数据 数据导入导出: json或cvs格式,每次一个collection 数据导出:...

    Mongodb-and-charp

    Mongodb-and-csharp 不定时更新c#使用Mongodb 对应的Mongodb shell 语法范例题目依据"7天学会大数据资料处理NoSQL MongoDB 入门与活用

    MongoDB NOSQL数据库

    介于关系数据库和非关系数据库之间的产品,是非...Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

    mongodb-4.0.2 for linux CSDN 下载

    MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 来自 CSDN_华仔 的CSDN 博客 ,全文地址请...

    MongoDB安装教程

    MongoDB是一个开源的、跨平台的、面向文档的NoSQL数据库管理系统。它的设计目标是提供高性能、高可用性和可扩展性,以满足现代应用程序对数据存储和处理的需求。 MongoDB使用文档模型来存储数据,文档是以类似于...

    mongodb.zip

    NoSQLBooster for MongoDB是MongoDB数据库的管理以及服务器监控工具,拥有Visual Explain Plan,查询构建器,SQL查询,ES2017语法支持等功能,功能强大,操作简单,使用后可以帮助用户更轻松便捷的管理监控MongoDB...

    MongoDB_文档_查询

    MongoDB 查询数据的语法格式如下: db.collection.find(query, projection) query :可选,使用查询操作符指定查询条件 projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该...

    Mongodb注入攻击

    关于mongodb的基本安装运行操作以及php操作mongodb,请参考我以前的文章php下操作...2.用execute方法执行字符串比如:此时,传进方法execute的参数就是字符串变量$query特别的,此时的字符串书写语法为js的书写语

    mongodb-linux-x86_64-4.0.4.tgz

    linux64版,4.0.4版本,MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据...

    MongoDB特点与体系结构等简介

    MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是...

    MongoDBdemo:分布式数据库MongoDB+SpringBoot的物流订单系统

    题目: 基于MongoDB集群和...MongoDB最大的特点是他的查询语言非常强大,其语法类似于面向对象的查询语言,几乎可以实现类似关系数据库单的绝大部分功能,而且还支持对数据库建立索引。 1.1.1 MongoDB的优点 作为一个No

    老生常谈MongoDB数据库基础操作

    MongoDB和Node.js特别般配,因为Mongodb是基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储的,增删改查等管理数据库的命令和JavaScript语法很像。本文将详细介绍MongoDB数据库 数据库 数据库...

    MongoDB 删除文档

    MongoDB 删除文档 在前面的几个章节中我们已经学习了MongoDB中如何为集合添加数据和更新数据。在本章节中我们将继续学习MongoDB集合的删除...如果你的 MongoDB 是 2.6 版本以后的,语法格式如下: db.collection.remov

    MongoDB使用手册

    MongoDB的使用手册,包括安装的介绍,语法介绍及其相关的命令介绍

Global site tag (gtag.js) - Google Analytics