- 浏览: 241806 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
DeepThought:
必须赞一个 用了各种方法 最终还是改了repo才能下载! Th ...
Android源码下载出现的问题 -
wj10000:
,这个不错呀,还准备用js 实现这个来着 ....
自己写jstl标签解析long时间 -
wjjxf:
xubingok 写道System.out.println是J ...
Android无法System.out.println出null -
xubingok:
System.out.println是JDK中的io流中的方法 ...
Android无法System.out.println出null -
JjayLee:
你可以更详细一点。。。
android网络连接Wifi和cmnet及cmwap的问题
公司的项目要求使用的数据库要求是MongoDB,说是分布式的,之前一直没有使用过,没办法,现在必须学会使用,还要求对该数据库进行简单的封装,使业务层不用关心底层数据库实现!
MongoDB是什么?
我现在关心的是如何使用这个数据库。
从官网上下载最新版本的数据库mongodb-1.4.1到本地,解压后,运行bin目录下的mongod.exe不过需要在命令行下运行,为了方便,写了个bat文件
只要运行这个bat就可以启动服务器了,默认端口在27017。
那么客户端呢,自带的客户端是mongo.exe这个程序,直接打开就默认的连接到本地的数据库。下面可以在这个shell里写命令,
show dbs,列出所有的数据库,use test,使用test这个数据库,怎么创建一个数据库呢?use newdb就可以了,如果newdb存在则不创建,不存在则创建,但这个时候如果继续show dbs发现没有newdb,怎么办,执行show collections 再show dbs发现newdb存在了,原来use newdb并不立即产生,只有在使用这个newdb后才产生.
同样,现在新建一个集合,使用db.newCol.save({})在创建一个数据后则自动创建这个newCol集合,现在使用show collections可以看见newCol了,save()括号里的是数据对象,是一个json格式的数据,比如我们想存入用户名和密码可以这样,db.user.save({userName:"testU",userPwd:"123456"}),然后执行db.user.find(),列出所有记录,{ "_id" : ObjectId("4bcadb0b8a76000000001b08"), "userName" : "testU", "userPwd"
: "123456" },可以看到输出结果也是json格式,因此在使用json的场合很适用。
想获得帮助,可以使用db.foo.help()列出所有对集合的操作。
db.foo.remove()是用来删除数据,只删除匹配的对象
db.foo.update({},{})更新对象,第一个参数是查询对象,第二个是替代的,可以在第二个对象里指定更新哪些字段,要使用$set。
也可以分页,db.foo.find()有limit和skip2,使用这个2个就可以分页查询了。
总的来说,使用mongodb可以满足常见的增删改差,但是不能完成复杂的跨表级联查询,mongodb努力使数据变得简单紧凑,因为你可以db.user.save({userName:"dd"})也可以db.user.save({userName:"ff",pwd:"123"}),这样第一个数据没有密码,而第二个有密码,2个数据没有关系的。
我在封装时使用java反射机制,将一个model解读为DBObject格式存储,读数据时一样再反射为model。
官网提供有javaAPI供下载,使用该API
1 建立连接
要建立MongoDB的连接,你只要指定要连接到的数据库就可以。这个数据库不一定存在,如果不存在,MongoDB会先为你建立这个
库。同时,在连接时你也可以具体指定要连接到的网络地址和端口。下面的是连接本机数据库的一些例子:
2 安全验证(非必选)
MongoDB服务可以在安全模式运行,此时任何客户端要连接数据库时需使用用户名和密码。在JAVA中可使用如下方法连接:
如果用户名密码验证通过,返回值为true,否则为false
3 获取集合列表
每个数据库都存在零个或多个集合,需要时你可以获得他们的列表:
4 获得一个集合
要获得某个特定集合,你可以指定集合的名字,并使用getCollection()方法:
当你获取了这个集合对象,你就可以对数据进行增删查改之类的操作。
5 插入文档
当你获得了一个集合对象,你就可以把文档插入到这个对象中。例如,存在一个JSON式的小文档:
{
"name" : "MongoDB",
"type" : "database",
"count" : 1,
"info" : {
x : 203,
y : 102
}
}
请注意,这个文档包含一个内部文档。我们可以使用BasicDBObject类来创建这个文档,并且使用insert()方法方便地将它插入到集
合中。
6 使用findOne()查找集合中第一个文档
要查找我们上一步插入的那个文档,可以简单地使用findOne()操作来获取集合中第一个文档。这个方法返回一个单一文档(这是相对于使用DBCursor的find()操作的返回),这对于只有一个文档或我们刚插入第一个文档时很有用,因为此时并不需要使用光标。
{
"_id" : "ac907a1f5b9d5e4a233ed300" ,
"name" : "MongoDB" ,
"type" : 1 ,
"info" : {
"x" : 203 ,
"y" : 102} ,
"_ns" : "testCollection"
}
注意_id和_ns元素是由MongoDB自动加入你的文档。记住:MongoDB内部存储使用的元素名是以“_”做为开始。
7 加入多种文档
为了做更多有趣的查询试验,让我们向集合中加入多种文档类型,象:
{
"i" : value
} 可以通过循环来实现
注意我们可以在一个集合中插入不同类型的文档,这就是我们所说的“模式自由”(schema-free)。
8 统计文档数量
使用getCount()方法
9 使用光标(cursor)来获取全部文档
为了获取集合中的所有文档,我们可以使用find()方法。这个方法返回一上DBCursor对象,来允许我们将符合查询条件的文档迭代
出来。
10 在查询中获取单一文档
我们可以创建一个查询,并传递给find()方法来获取集合中所有文档的一个子集。例如,我们想要查询域名为"i",并且值为71的文档:
11 使用条件查询获取集合
例如,我们想要查询所有i>50的文档:
12 创建索引
MongoDB支持索引,而且很容易在集合上增加索引。要创建索引,只需要指定要加索引的属性,并且指定升序(1)或降序即可(-1)。
13 获取索引列表
14 MongoDB管理函数
管理函数在com.mongodb.MongoAdmin类中定义。
例A:获取数据库列表
例B:获取数据库对象
例C:删除数据库
15 用DBObject存储JAVA对象
MongoDB for JAVA驱动中提供了用于向数据库中存储普通对象的接口DBObject
例如,存在一个需要存储的对象类Tweet
当一个文档从MongoDB中取出时,它会自动把文档转换成DBObject接口类型,要将它实例化为你的对象,需使用
16 JAVA驱动的并发性
JAVA的MongoDB驱动是线程安全的。如果你将它用在WEB服务中,可以创建它的一个单例,并在所有请求中使用它。
然而,如果你需要在一个会话(例如HTTP请求)中保证事务一致性,也许你会希望在这个会话中对驱动使用同一个端口。这仅仅在
请求量非常大的环境中,例如你经常会读取刚写入的数据。
为了这一点,你需要使用如下代码:
MongoDB是什么?
引用
MongoDB是一个基于分布式文件存储的数据库开源项目。由C++语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
*面向集合存储,易存储对象类型的数据。
*模式自由。
*支持动态查询。
*支持完全索引,包含内部对象。
*支持查询。
*支持复制和故障恢复。
*使用高效的二进制数据存储,包括大型对象(如视频等)。
*自动处理碎片,以支持云计算层次的扩展性
*支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
*文件存储格式为BSON(一种JSON的扩展)
*可通过网络访问
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
*面向集合存储,易存储对象类型的数据。
*模式自由。
*支持动态查询。
*支持完全索引,包含内部对象。
*支持查询。
*支持复制和故障恢复。
*使用高效的二进制数据存储,包括大型对象(如视频等)。
*自动处理碎片,以支持云计算层次的扩展性
*支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
*文件存储格式为BSON(一种JSON的扩展)
*可通过网络访问
我现在关心的是如何使用这个数据库。
从官网上下载最新版本的数据库mongodb-1.4.1到本地,解压后,运行bin目录下的mongod.exe不过需要在命令行下运行,为了方便,写了个bat文件
@echo off cd bin mongod -dbpath "E:\dbdata" run
只要运行这个bat就可以启动服务器了,默认端口在27017。
那么客户端呢,自带的客户端是mongo.exe这个程序,直接打开就默认的连接到本地的数据库。下面可以在这个shell里写命令,
show dbs,列出所有的数据库,use test,使用test这个数据库,怎么创建一个数据库呢?use newdb就可以了,如果newdb存在则不创建,不存在则创建,但这个时候如果继续show dbs发现没有newdb,怎么办,执行show collections 再show dbs发现newdb存在了,原来use newdb并不立即产生,只有在使用这个newdb后才产生.
同样,现在新建一个集合,使用db.newCol.save({})在创建一个数据后则自动创建这个newCol集合,现在使用show collections可以看见newCol了,save()括号里的是数据对象,是一个json格式的数据,比如我们想存入用户名和密码可以这样,db.user.save({userName:"testU",userPwd:"123456"}),然后执行db.user.find(),列出所有记录,{ "_id" : ObjectId("4bcadb0b8a76000000001b08"), "userName" : "testU", "userPwd"
: "123456" },可以看到输出结果也是json格式,因此在使用json的场合很适用。
想获得帮助,可以使用db.foo.help()列出所有对集合的操作。
db.foo.remove()是用来删除数据,只删除匹配的对象
db.foo.update({},{})更新对象,第一个参数是查询对象,第二个是替代的,可以在第二个对象里指定更新哪些字段,要使用$set。
也可以分页,db.foo.find()有limit和skip2,使用这个2个就可以分页查询了。
总的来说,使用mongodb可以满足常见的增删改差,但是不能完成复杂的跨表级联查询,mongodb努力使数据变得简单紧凑,因为你可以db.user.save({userName:"dd"})也可以db.user.save({userName:"ff",pwd:"123"}),这样第一个数据没有密码,而第二个有密码,2个数据没有关系的。
我在封装时使用java反射机制,将一个model解读为DBObject格式存储,读数据时一样再反射为model。
官网提供有javaAPI供下载,使用该API
引用
1 建立连接
要建立MongoDB的连接,你只要指定要连接到的数据库就可以。这个数据库不一定存在,如果不存在,MongoDB会先为你建立这个
库。同时,在连接时你也可以具体指定要连接到的网络地址和端口。下面的是连接本机数据库的一些例子:
import com.mongodb.Mongo; import com.mongodb.DBCollection; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import com.mongodb.DBCursor; import com.mongodb.MongoAdmin; Mongo db = new Mongo("mydb"); Mongo db = new Mongo("localhost", "mydb"); Mongo db = new Mongo("localhost", 27017, "mydb");
2 安全验证(非必选)
MongoDB服务可以在安全模式运行,此时任何客户端要连接数据库时需使用用户名和密码。在JAVA中可使用如下方法连接:
boolean auth = db.authenticate(userName, password);
如果用户名密码验证通过,返回值为true,否则为false
3 获取集合列表
每个数据库都存在零个或多个集合,需要时你可以获得他们的列表:
Set colls = db.getCollectionNames(); for(String s : colls){ System.out.println(s); }
4 获得一个集合
要获得某个特定集合,你可以指定集合的名字,并使用getCollection()方法:
DBCollection coll = db.getCollection("testCollection");
当你获取了这个集合对象,你就可以对数据进行增删查改之类的操作。
5 插入文档
当你获得了一个集合对象,你就可以把文档插入到这个对象中。例如,存在一个JSON式的小文档:
{
"name" : "MongoDB",
"type" : "database",
"count" : 1,
"info" : {
x : 203,
y : 102
}
}
请注意,这个文档包含一个内部文档。我们可以使用BasicDBObject类来创建这个文档,并且使用insert()方法方便地将它插入到集
合中。
BasicDBObject doc = new BasicDBObject(); doc.put("name", "MongoDB"); doc.put("type", "database"); doc.put("count", 1); BasicDBObject info = new BasicDBObject(); info.put("x", 203); info.put("y", 102); doc.put("info", info); coll.insert(doc);
6 使用findOne()查找集合中第一个文档
要查找我们上一步插入的那个文档,可以简单地使用findOne()操作来获取集合中第一个文档。这个方法返回一个单一文档(这是相对于使用DBCursor的find()操作的返回),这对于只有一个文档或我们刚插入第一个文档时很有用,因为此时并不需要使用光标。
DBObject myDoc = coll.findOne(); System.out.println(myDoc);返回类似:
{
"_id" : "ac907a1f5b9d5e4a233ed300" ,
"name" : "MongoDB" ,
"type" : 1 ,
"info" : {
"x" : 203 ,
"y" : 102} ,
"_ns" : "testCollection"
}
注意_id和_ns元素是由MongoDB自动加入你的文档。记住:MongoDB内部存储使用的元素名是以“_”做为开始。
7 加入多种文档
为了做更多有趣的查询试验,让我们向集合中加入多种文档类型,象:
{
"i" : value
} 可以通过循环来实现
for(int i = 0; i < 100; i++){ coll.insert(new BasicDBObject().append("i", i)); }
注意我们可以在一个集合中插入不同类型的文档,这就是我们所说的“模式自由”(schema-free)。
8 统计文档数量
使用getCount()方法
System.out.println(coll.getCount());
9 使用光标(cursor)来获取全部文档
为了获取集合中的所有文档,我们可以使用find()方法。这个方法返回一上DBCursor对象,来允许我们将符合查询条件的文档迭代
出来。
DBCursor cur = coll.find(); while(cur.hasNext()){ System.out.println(cur.next()); }
10 在查询中获取单一文档
我们可以创建一个查询,并传递给find()方法来获取集合中所有文档的一个子集。例如,我们想要查询域名为"i",并且值为71的文档:
BasicDBObject query = new BasicDBObject(); query.put("i", 71); cur = coll.find(query); while(cur.hasNext()){ System.out.println(cur.next()); }
11 使用条件查询获取集合
例如,我们想要查询所有i>50的文档:
BasicDBObject query = new BasicDBObject(); query.put("i", new BasicDBObject("$gt", 50)); cur = coll.find(query); while(cur.hasNext()){ System.out.println(cur.next()); }当然,我们也可以做20 < i <= 30的查询
BasicDBObject query = new BasicDBObject(); query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30)); cur = coll.find(query); while(cur.hasNext()){ System.out.println(cur.next()); }
12 创建索引
MongoDB支持索引,而且很容易在集合上增加索引。要创建索引,只需要指定要加索引的属性,并且指定升序(1)或降序即可(-1)。
coll.createIndex(new BasicDBObject("i", 1));
13 获取索引列表
List list = coll.getIndexInfo(); for(DBObject o : list){ System.out.println(o); }
14 MongoDB管理函数
管理函数在com.mongodb.MongoAdmin类中定义。
例A:获取数据库列表
MongoAdmin admin = new MongoAdmin(); for(String s : admin.getDatabaseNames()){ System.out.println(s); }
例B:获取数据库对象
Mongo m = admin.getDB("mydb");
例C:删除数据库
admin.dropDatabase("mydb");
15 用DBObject存储JAVA对象
MongoDB for JAVA驱动中提供了用于向数据库中存储普通对象的接口DBObject
例如,存在一个需要存储的对象类Tweet
public class Tweet implements DBObject{ /*...*/ }可以使用如下代码:
Tweet myTweet = new Tweet(); myTweet.put("user", userId); myTweet.put("message", message); myTweet.put("date", new Date()); collection.insert(myTweet);
当一个文档从MongoDB中取出时,它会自动把文档转换成DBObject接口类型,要将它实例化为你的对象,需使用
DBCollection.setObjectClass()。 collection.setObjectClass(Tweet); Tweet myTweet = (Tweet)collection.findOne();
16 JAVA驱动的并发性
JAVA的MongoDB驱动是线程安全的。如果你将它用在WEB服务中,可以创建它的一个单例,并在所有请求中使用它。
然而,如果你需要在一个会话(例如HTTP请求)中保证事务一致性,也许你会希望在这个会话中对驱动使用同一个端口。这仅仅在
请求量非常大的环境中,例如你经常会读取刚写入的数据。
为了这一点,你需要使用如下代码:
Mongo m; m.restartStart(); // code......... m.requestDone();
发表评论
-
jdbc是否设置自动提交对性能的影响
2018-11-07 15:06 1011项目中DB层会定时向mysql批量提交sql操作,之前是未设置 ... -
很久没写博客了
2018-10-27 10:30 2先激活下,有将近4年没有写实质性的博客内容了,这几年发生了很多 ... -
两年的项目开发一点小心得(二)
2013-06-20 23:31 903接着昨天 ... -
两年的项目开发一点小心得
2013-06-20 00:38 869从11年8月份 ... -
解决NSData中非法utf-8字节的问题
2012-05-13 13:12 4939当用nsdata,按照utf8编码来初始化nsstr ... -
练练手,用mina2.0搭建一个nio客户端
2012-05-08 16:03 6697练练手,用mina2.0搭建一个nio客户端,连接服务器。 ... -
android网络连接Wifi和cmnet及cmwap的问题
2011-10-27 23:43 4531困扰了我很久的,android ,http client无法直 ... -
C++学习小记
2011-07-05 23:23 1074很久没有写技术博客了,年后过来没有多少编程的工作, ... -
Java解惑读书笔记2
2011-05-07 11:10 1346从网上下的java解惑总共讲了61点,我拣一些,自己不知道的或 ... -
Java解惑读书笔记1
2011-05-07 10:14 11011。奇偶判断,应该用i%2 ... -
mongodb中mapreduce应该注意的问题
2011-03-15 14:46 1787今天用mongodb统计,老是出错误,在反复改和看官网文档后, ... -
如何计算一定的成功几率的结果
2010-12-15 11:37 1006如何计算一定的成功几率的结果 经常遇到比如50%的成功概率,求 ... -
Mongodb如何保持数据正确更新
2010-11-29 15:26 2038Mongodb如何保持数据正确更新 所谓数据正确更新,就是在 ... -
自己开发的eclipse插件-生成java pojo字段名称
2010-11-25 14:20 2499自己开发的eclipse插件-生成java pojo字段名称 ... -
base64编码的java实现
2010-11-11 16:00 1719base64编码的java实现 虽然有现成的库,自己也写了个 ... -
人人网小小战争辅助工具分析
2010-11-05 11:38 23128人人网小小战争辅助工具分析 话说,闲的会蛋疼。过不是,最近无 ... -
Eclipse环境下的新浪微博插件
2010-11-03 22:36 3542E博,Eclipse下的新浪微博插件。 业余时间开发的,已经实 ... -
webqq2协议分析和qq聊天机器人简单实现
2010-11-02 16:51 22933webqq2协议分析和qq聊天机器人简单实现 通过webqq ... -
随便写个Http Web Server 玩玩,当然是简单的。只能查看文件
2010-08-26 17:37 1254不说话,直接上代码: import java.io.Buff ... -
自定义jstl标签在resin下出错解决办法
2010-05-29 13:37 1274web.xml还是 <web-app version=& ...
相关推荐
MongoDB入门指南 MongoDB是一种开源的文档类型数据库,它具有高性能、可扩展、高可用、自动收缩等特性。MongoDB能够避免传统的ORM映射,从而有助于开发。MongoDB中的每一行记录就是一个文档,它是一个由键值对构成...
首先,我们从"MongoDB入门教程"开始。MongoDB采用的是键值对存储方式,数据以JSON格式(BSON)存储,这使得数据的读写更加自然和高效。MongoDB支持丰富的查询语法,包括字段选择、条件操作、排序和分组,为开发者...
### MongoDB入门知识点详解 #### 一、NoSQL简介与MongoDB概述 - **NoSQL**:NoSQL(Not Only SQL)是一种非关系型数据库管理系统的总称,它突破了传统关系型数据库在处理大规模数据时的限制,尤其适用于大数据及高...
在这个“MongoDB入门”主题中,我们将深入探讨MongoDB的基础知识、安装与配置、数据模型、查询操作以及高级特性。 首先,让我们了解MongoDB的基本概念。MongoDB以其“集合”(Collections)和“文档”(Documents)...
### MongoDB入门到精通知识点概述 #### 一、MongoDB简介 MongoDB是一种开源的文档数据库,采用JSON格式存储数据,并提供了高性能、高可用性和自动扩展的能力。它属于NoSQL数据库的一种,非常适合处理大规模数据和...
Mongo DB ,是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式,备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。...
### MongoDB入门学习知识点详解 #### 一、MongoDB简介与特点 MongoDB是一种非常流行的开源文档型NoSQL数据库系统,以其高性能、高可用性及易扩展性而著称。相较于传统的关系型数据库如MySQL、Oracle等,MongoDB...
根据提供的文件内容,我们将详细探讨MongoDB相关的知识点,并围绕NoSQL数据库的特点和优势,以及分布式系统理论中的CAP定理和ACID与BASE模型。 首先,MongoDB是一种流行的NoSQL数据库,它以文档的形式存储数据,与...
### MongoDB入门到精通 #### 一、MongoDB简介 **MongoDB** 是一款采用 C++ 编写的开源、可扩展且高性能的文档型数据库。它以其面向文档的特性、易于扩展性和高性能而著称,成为了现代应用开发中非常受欢迎的选择之...
《MongoDB入门指南》是一个快速入门MongoDB的教程,它以MongoDB的3.0版本进行说明。本教程安装的是MongoDB Windows 64位版本,目的只是为了让读者快速的入门MongoDB,快速理解和操作MongoDB。在开发或生产中强烈要求...
MongoDB 的入门教程旨在帮助初学者快速掌握这个数据库系统的基本概念和操作。 《MongoDB 入门教程》CHM 手册可能涵盖以下关键知识点: 1. **数据模型**:MongoDB 使用类似 JSON 的文档结构(BSON)来存储数据,...
1.mongodb-win32-i386-2.4.8.zip 由于大小限制,请到官网下载...2.MongoDB开发使用手册.docx 3.MongoDB快速入门教程.docx 4.MongoDB入门经典.doc 5.MougoTest.rar(MongoDB入门经典.doc用例)
这份《MongoDB入门实战手册中文PDF版最新版本》将为对MongoDB感兴趣的读者提供一个全面的入门指南。手册内容涵盖了MongoDB的基础知识、核心特性、安装和配置、数据管理、索引优化、故障排除以及高级特性等多个方面。...
"Mongodb入门教程、示例+Spring Boot完整示例+聚合" 本节课将完整地介绍 MongoDB 的入门教程、示例、Spring Boot 完整示例和聚合。 简介 NoSQL(Not Only SQL)是一种非关系型的数据库, MongoDB 是基于分布式...
MongoDB 入门教程笔记
MongoDB入门指南
MongoDB入门篇1主要介绍了数据的基本概念,数据库管理系统(DBMS)的定义,常见的数据库管理系统,以及NoSQL数据库的相关知识。 1. 数据:数据是未经处理的原始记录,描述事物存在的符号,通常需要通过组织和分类...
### MongoDB入门实战手册知识点概述 #### 一、MongoDB简介 MongoDB是一种开源的文档型数据库,属于NoSQL数据库的一种。它使用JSON格式的文档来存储数据,具有高性能、高可用性和易扩展性等特点,非常适合处理半结构...
### MongoDB入门与开发范例 #### 一、MongoDB与NoSQL运动 MongoDB作为NoSQL运动中的一个重要成员,它的出现和发展标志着数据库技术领域的新篇章。NoSQL(Not Only SQL)运动强调使用非关系型数据存储,以解决传统...