`
冷静
  • 浏览: 146956 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论
阅读更多
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。
  它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
  *面向集合存储,易存储对象类型的数据。
  *模式自由。
  *支持动态查询。
  *支持完全索引,包含内部对象。
  *支持查询。
  *支持复制和故障恢复。
  *使用高效的二进制数据存储,包括大型对象(如视频等)。
  *自动处理碎片,以支持云计算层次的扩展性
  *支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
  *文件存储格式为BSON(一种JSON的扩展)
  *可通过网络访问
  所谓“面向集合”(Collenction-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定义任何模式(schema)。
  模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
  存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。
  MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。

 

MongoDB对MySQL常用的SQL语句对应的实现 
—————————————— 
MySQL: 
SELECT * FROM user 
Mongo: 
db.user.find() 
—————————————— 
MySQl: 
SELECT * FROM user WHERE name = 'foobar' 
Mongo: 
db.user.find({ 'name' : 'foobar' }) 
—————————————— 
MySql: 
INSERT INTO user ('name','age') VALUES ('foobar',25) 
Mongo: 
db.user.insert({ 'name' : 'foobar' , 'age' : 25}) 
—————————————— 
如果想增加email这一列 
MySql: 
ALTER TABLE user ...	
Mongo: 
db.user.insert({ 'name' : 'foobar' , 'age' : 25 , 'email' : 'foo@bar.com' }) 
—————————————— 
MySql: 
DELETE * FROM user 
Mongo: 
db.user.remove({}) 
—————————————— 
MySql: 
DELETE FROM user WHERE age < 30 
Mongo: 
db.user.remove({ 'age' : {$lt : 30}}) 
$gt:> ; $gte:>= ; $lt:< ; $lte:<= ; $ne:!= 
—————————————— 
MySql: 
UPDATE user SET `age` = 36 WHERE `name` = 'foobar' 
Mongo: 
db.user.update({ 'name' : 'foobar'} , {$set : { 'age' : 36}}) 
—————————————— 
MySQL: 
UPDATE user SET `age` = 'age' + 3 WHERE `name` = 'foobar' 
Mongo: 
db.user.update({ 'name' : 'foobar'} , {$inc : {'age' : 3}}) 
—————————————— 
MySQl: 
SELECT COUNT(*) FROM user WHERE `name` = 'foobar' 
Mongo: 
db.user.find({ 'name' : 'foobar'}).count() 
—————————————— 
MySql: 
SELECT * FROM user limit 10,20 
Mongo: 
db.user.find().skip(10).limit(20) 
—————————————— 
MySQl: 
SELECT * FROM user WHERE `age` IN (25,35,45) 
Mongo: 
db.user.find({ 'age' : {$in : [25,35,45]}}) 
—————————————— 
MySql: 
SELECT * FROM user ORDER BY age DESC 
Mongo: 
db.user.find().sort({ 'age' : -1}) 
—————————————— 
MySQL: 
SELECT DISTINCT(name) FROM user WHERE age > 20 
Mongo: 
db.user.distinct( 'name',{'age' : {$lt : 20}}) 
—————————————— 
MySQL: 
SELECT name, sum(marks) FROM  user GROUP BY name 
Mongo: 
db.user.group({ 
key:{'name':true}, 
cond:{'name':'foo'}, 
reduce:function(obj,prev){prev.msum += obj.marks;}, 
initial:{msum : 0} 
}) 
—————————————— 
MySQL: 
SELECT name FROM user WHERE age < 20 
Mongo: 
db.user.find('this.age < 20' , {name : 1})


 该文档是翻译自文档[mongodb-docs-2010-10-24.pdf]的[Java Language Center]章节,根据自己的理解整理而成。


 希望能给像我这样开始接触的朋友一点帮助,同时也做个备忘,因为是刚刚学习,其中的很多功能目前都用不上,以后万一有什么功能不太清楚,也可以直接查阅该文档了。
 
   MongoDB Java Driver 简单操作
 
一、Java驱动一致性

 

 MongoDB的Java驱动是线程安全的,对于一般的应用,只要一个Mongo实例即可,Mongo有个内置的连接池(池大小默认为10个)。
 
 对于有大量写和读的环境中,为了确保在一个Session中使用同一个DB时,我们可以用以下方式保证一致性:
 
 DB mdb = mongo.getDB('dbname');
 
 mdb.requestStart();
 //
 // 业务代码
 //
 mdb.requestDone();

 

 DB和DBCollection是绝对线程安全的,它们被缓存起来了,所以在应用中取到的可能是同一个对象。

 

二、保存/查找对象(DBObject)

 

 Java驱动提供了DBObject接口,方便我们保存对象到数据库中。
 
 定义需要保存的对象:
 
 public class Tweet implements DBObject {
  /** ...... */
 }
 
 然后我们可以使用该对象:
 
 Tweet tweet = new Tweet();
 tweet.put("user", userId);
 tweet.put("message", message);
 tweet.put("date", new Date());
 
 collection.insert(tweet);
 
 当从数据库中查询时,结果会自动的转换成DBObject对象,我们可以转换成我们自己的类型:
 
 collection.setObjectClass(Tweet);
 
 Tweet myTweet = (Tweet)collection.findOne();

 

三、创建连接

 

 Mongo m = new Mongo();
 Mongo m = new Mongo("localhost");
 Mongo m = new Mongo("localhost", 27017);
 
 DB db = m.getDB("mydb);
 
 注意:事实上,Mongo实例代表了一个数据库连接池,即使在多线程的环境中,一个Mongo实例对我们来说已经足够了。
 
四、认证(可选的)

 

 boolean auth = db.authenticate("myUserName", "myPasswd");
 
五、取得Collection列表

 

 Set<String> colls = db.getCollectionNames();
 
 for(String s : colls) {
  System.out.prinln(s);
 }

 

六、获取一个Collection

 

 DBCollection coll = db.getCollection("testCollection");
 
 使用DBCollection,我们可以进行插入、查询数据等数据操作。

 

七、插入文档

 

 假设有个JSON文档如下所示:
 
 {
  "name": "MongoDB",
  "type": "database",
  "count": 1,
  "info": {
     x: 203,
     y: 102
    }
 }
 
 注意:上面的JSON文档有个内嵌文档"info"。
 
 我们完全可以利用BasicDBObject来创建一个和上面的JSON一样的文档,并且把它保存在MongoDB中。
 
 DBObject doc = new BasicDBObject();
 
 doc.put("name", "MongoDB");
 doc.put("type", "database");
 doc.put("count", 1);
 
 DBObject info = new BasicDBObject();
 info.put("x", 203);
 info.put("y", 102);
 
 doc.put("info", info);
 
 coll.insert(doc);
 
八、查询第一个文档(findOne())

 

 为了验证在上面我们保存的类似JSON的数据,我们可以用findOne()方法取得数据。
 
 findOne(): 返回一个文档;
 find(): 返回一个游标(DBCursor),其中包含一组对象DBObject;
 
 DBObject doc = coll.findOne();
 System.out.println(doc);
 
 我们将会看到控制台输出:
 { "_id" : "49902cde5162504500b45c2c" , "name" : "MongoDB" , "type" : "database" , "count" : 1 , "info" : { "x" : 203 , "y" : 102} , "_ns" : "testCollection"}
 
九、插入多个文档

 

 为了在后来展示更多的查询方法,我们先插入几个文档,它们的JSON像这样:
 {
  "i": value
 }
 
 使用一个循环插入数据:
 
 for(int i = 0; i < 100; i++) {
  coll.insert(new BasicDBObject().append("i", i));
 }
 
 我们注意到,同一个coll,我们完全可以插入不同风格的数据,这就是MongoDB的重要特性“模式自由”。
 
十、统计文档数

 

 现在我们已经有101份文档在数据库中了,现在统计一下看是否正确。
 
 long count = coll.getCount();
 System.out.println(count);
 
 控制台将会输出:101
 
十一、使用游标取得所有的文档

 

 DBCursor cursor = coll.find();
 
 while(cursor.hasNext()) {
  DBObject object = cursor.next();
  System.out.println(object);
 }
 
十二、查询单个文档

 

 DBObject query = new BasicDBObject();
 
 query.put("i", 71);
 
 cursor = coll.find(query);
 
 while(cur.hasNext()) {
  DBObject object = cursor.next();
  System.out.println(object);
 }
 
 控制台的输出类似如下:
 
 { "_id" : "49903677516250c1008d624e" , "i" : 71 , "_ns" : "testCollection"}
 
十三、查询文档集合

 

 根据查询条件,我们可以通过DBCollection从数据库中取出多个对象,比如查询i>50的文档集合:
 
 query = new BasicDBObject();
 
 query.put("i", new BasicDBObject("$gt", 50)); // i>50
 
 cursor = coll.find(query);
 
 while(cursor.hasNext()) {
  DBObject object = cursor.next();
  System.out.println(object);
 }
 
 比如查询条件为 20<i<=30:
 
 query = new BasicDBObject();
 
 // 20<i<=30
 query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30));
 
 cursor = coll.find(query);
 
 while(cursor.hasNext()) {
  DBObject object = cursor.next();
  System.out.println(object);
 }

 

十四、创建索引

 

 MongoDB支持索引,并且给一个DBCollection添加索引非常简单,你只要指明需要创建索引的字段,然后指明其是升序(1)还是降序(-1)即可,比如在"i"上创建升序索引。
 
 coll.createIndex(new BasicDBObject("i", 1)); // 1代表升序
 
十五、查询索引

 

 我们可以查询到所有的索引:
 
 List<DBObject> list = coll.getIndexInfo();
 
 for(DBObject index : list){
  System.out.println(index);
 }
 
 控制台的输出类似如下所示:
 
 { "name" : "i_1" , "ns" : "mydb.testCollection" , "key" : { "i" : 1} , "_ns" : "system.indexes"}

 


   MongoDB的管理功能
   
一、获取所有的数据库

 

 Mongo m = new Mongo();
 
 for(String s : m.getDatabaseNames()) {
  System.out.println(s);
 }

 

二、删除数据库

 

 m.dropDatabase("my_new_db");
 
 
   MongoDB的Java类型

 

一、对象ID

 

 ObjectId被用作自动生成的唯一ID.
 
 ObjectId id = new ObjectId();
 ObjectId copy = new ObjectId(id);
 
二、正则表达式

 

 Pattern john = Pattern.compile("joh?n", CASE_INSENSITIVE);
 DBObject query = new BasicDBObject("name", john);
 
 // 查询所有 "name" 匹配 /joh?n/i 的文档
 DBCursor cursor = collection.find(query);

 

三、日期和时间

 

 Date now = new Date();
 DBObject time = new BasicDBObject("ts", now);
 
 collection.save(time);
 
四、数据库引用

 

 DBRef可以用来保存数据库引用。
 
 DBRef addressRef = new DBRef(db, "foo.bar", address_id);
 DBObject address = addressRef.fetch();
 
 DBObject person = BasicDBObjectBuilder.start()
  .add("name", "Fred")
  .add("address", addressRef)
  .get();
 collection.save(person);
 
 DBObject fred = collection.findOne();
 DBRef addressObj = (DBRef)fred.get("address");
 addressObj.fetch();
 
五、二进制数据

 

 字节数组(byte[])被当作二进制数据。
 
六、内嵌文档

 

 JSON样式的数据如下:
 {
  "x": {
   "y": 3
  }
 }
 
 则在MongoDB中,Java表示为:
 
 DBObject y = new BasicDBObject("y", 3);
 DBObject x = new BasicDBObject("x", y);
 
七、数组

 

 任何继承自List的对象,在MongoDB中,都被当成是数组。
 
 如果想表示如下JSON数据:
 
 {
  "x": [
   1,
   2,
   {"foo": "bar"},
   4
  ]
 }
 
 则在Java中,应该为:
 
 List<Object> x = new ArrayList<Object>();
 x.add(1);
 x.add(2);
 x.add(new BasicDBObject("foo", "bar"));
 x.add(4);
 
 DBObject doc = new BasicDBObject("x", x);
 System.out.println(doc);

 

===========================================



参考文档:http://baike.baidu.com/view/3385614.htm
          http://www.iteye.com/topic/795012
          http://datalife.iteye.com/blog/804762

分享到:
评论

相关推荐

    Linux安装mongodb客户端

    sudo vim /etc/yum.repos.d/mongodb-org-4.2.repo 写入: [mongodb-org-4.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/ gpgcheck=1 enabled=1 gpg...

    mongodb安装包和compass

    MongoDB是一款开源、分布式、高性能的NoSQL数据库,它不使用传统的表格和列式结构来存储数据,而是采用键值对、文档、集合和图形数据模型。这种设计使得MongoDB在处理非结构化和半结构化数据时表现出色,特别适合大...

    mongodb-测试数据

    MongoDB是一种流行的开源、分布式文档数据库,常被用于构建高性能、可扩展的应用程序。这个“mongodb-测试数据”压缩包显然包含了一些用于测试MongoDB功能的样例数据集,特别是针对增、删、改、查(CRUD)操作的学习...

    linux安装mongodb教程

    /usr/local/mongodb/mongodb-linux-2.0.7/bin/mongod --dbpath=/usr/local/mongodb/data/db --logpath=/usr/local/mongodb/mongodb-linux-2.0.7/logs/mongodb.log --logappend --port=27017 --fork 知识点 6:配置...

    spring-data使用mongodbTemplate对MongoDB进行读写操作

    Spring Data MongoDB是一个强大的Java库,它为开发人员提供了一种简单的方式来访问和操作MongoDB数据库。这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDB...

    MongoDB实验 - .docx

    MongoDB 实验报告 本实验报告旨在详细介绍 MongoDB 的安装、配置和基本操作步骤,本报告基于 CentOS 7 系统,通过一步一步的截图和文字说明,帮助读者快速掌握 MongoDB 的使用。 一、安装 MongoDB 首先,我们需要...

    MongoDB之conf配置文件详解

    MongoDB之conf配置文件详解 MongoDB的配置文件是服务器的核心组件之一,它控制着MongoDB服务器的各种设置和行为。在本文中,我们将详细介绍MongoDB的配置文件的各个部分,并解释每个设置的作用和意义。 一、数据库...

    mongodb c#驱动最新驱动mongodb.driver.dll 版本2.12.0-beta1

    MongoDB 是一个流行的开源、基于分布式文件存储的数据库系统,主要设计用于处理大量数据的分布式环境。C# 驱动是 MongoDB 提供的一种客户端库,允许 .NET 开发者与 MongoDB 数据库进行交互。标题提到的是 MongoDB 的...

    mongodb.dll 下载.zip

    MongoDB是一个开源、分布式、高性能的NoSQL数据库,以其灵活性、可扩展性和高可用性而闻名。`mongodb.dll`是MongoDB数据库系统在Windows平台上运行所必需的一个动态链接库(DLL)文件,它包含了MongoDB客户端和...

    geoserver发布mongodb矢量数据地图服务.docx

    Geoserver发布MongoDB矢量数据地图服务 Geoserver是一款功能强大且开源的地理信息系统(GIS)服务器,能够实现空间数据的存储、处理和发布。MongoDB是一款NoSQL数据库,能够存储大量的矢量数据。本文将介绍如何使用...

    MongoDB应用设计模式

    资源名称:MongoDB应用设计模式内容简介:无论是在构建社交媒体网站,还是在开发一个仅在内部使用的企业应用程序,《MongoDB应用设计模式》展示了MongoDB需要解决的商业问题之间的连接。你将学到如何把MongoDB设计...

    MongoDB(mongodb-org-server_5.0.4_amd64.deb)

    MongoDB Community Server(mongodb-org-server_5.0.4_amd64.deb)适用于适用于Debian10 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...

    mongodb数据库jar包

    MongoDB是一个流行的开源、分布式文档型数据库,设计用于处理大量数据并提供高可用性和高性能。在Java应用程序中,为了与MongoDB进行交互,我们需要使用Java MongoDB驱动程序。这个压缩包包含的就是Java连接MongoDB...

    MongoDB4.2.21 Linux版本安装包

    MongoDB是一款高性能、无模式的分布式文档型数据库,被广泛应用于大数据分析、内容管理系统、物联网(IoT)、实时应用程序和地理位置数据存储等场景。在Linux环境下安装MongoDB 4.2.21版本,是许多系统管理员和开发者...

    MongoDB Community(mongodb-linux-aarch64-ubuntu1804-5.0.8.tgz)

    MongoDB Community Server(mongodb-linux-aarch64-ubuntu1804-5.0.8.tgz)适用于Ubuntu 18.04 Arm芯片, MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决...

    MongoDB(mongodb-src-r5.0.4.tar.gz)

    MongoDB Community Server(mongodb-src-r5.0.4.tar.gz)源代码 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非...

    MongoDB c#驱动 dll

    MongoDB是一种流行的开源、分布式文档型数据库,以其灵活性、高性能和可伸缩性而闻名。在C#开发环境中,MongoDB提供了专门的C#驱动程序,使得开发者能够方便地与MongoDB进行交互。本篇文章将深入探讨MongoDB的C#驱动...

    Mongodb基础知识详解(值得珍藏).pdf

    MongoDB 是一个高性能的NoSQL数据库,以分布式文件存储为基础,提供灵活的数据模型和高效的查询操作。MongoDB 不同于传统的关系型数据库,它采用面向集合的存储方式,支持无模式的数据模型,允许数据自由组织,这...

    Mongodb for Ubuntu 18.04 ARM 64

    MongoDB 是一个流行的开源文档型数据库,被广泛用于存储、管理和检索非结构化或半结构化数据。在本文中,我们将深入探讨如何在基于ARM架构的Ubuntu 18.04系统上安装和使用MongoDB。 一、ARM架构与Ubuntu 18.04 ARM...

    MongoDB Days 2015 深圳 PPT 共享

    MongoDB是一种分布式文档数据库,以其灵活性、高性能和可伸缩性而闻名,尤其适用于处理大量半结构化和非结构化数据。MongoDB Day 2015 深圳活动显然是一个专门针对MongoDB技术的研讨会或会议,旨在深入探讨和分享...

Global site tag (gtag.js) - Google Analytics