MongoDB Java 入门手册


原文地址:http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-java-driver/#getting-started-with-java-driver

安装:下载安装包,双击安装。还要下载Java的驱动包。

启动:默认要在c盘根目录下先创建\data\db文件夹(否则在启动服务时添加 --dbpath d:\data,即指定数据库数据存放的地址) mkdir data\db    //用于存放数据文件 cd C:\Program Files\MongoDB 2.6 Standard\bin //转到安装地址 mongod    //启动数据库服务,运行下面的程序时保证此窗口一直开着 mongo     //启动客户端

-----------------------------------------------------------------

简介

这个页面使用 MongoDB Java Driver 的简要说明.

关于 Java API 的更多信息, 请转到 online API Documentation for Java Driver.

快速浏览

使用 Java driver 非常简单。首先,确保 mongo.jar 包含在你的 classpath 中。下面的代码片段可在driver范例examples/QuickTour.java找到。


建立连接

要连接一个 MongoDB, 你至少需要要连接的数据库的名字。数据库并不必须事先存在——如不存在,MongoDB会帮你创建。

还有,在连接的时候你可以指定服务器地址和端口号。下面的例子展示了三种连接本地数据库mydb的方式。

import com.mongodb.MongoClient;
import com.mongodb.MongoException;
import com.mongodb.WriteConcern;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;
import com.mongodb.ServerAddress;

import java.util.Arrays;

// 直接连接一个单独的 MongoDB 服务器 (注意这不会自动发现最好的,即使它是复制集的成员之一)
MongoClient mongoClient = new MongoClient();
// 或
MongoClient mongoClient = new MongoClient( "localhost" );
// 或
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
// 或, 要连接一个复制集,自动发现最好的,提供一列成员种子
MongoClient mongoClient = new MongoClient(Arrays.asList(new ServerAddress("localhost", 27017),
                                      new ServerAddress("localhost", 27018),
                                      new ServerAddress("localhost", 27019)));

DB db = mongoClient.getDB( "mydb" );
此时,db客户端已经能连接一个指定的MongoDB服务器了。这样,你可做进一步的操作了。

注意:

 MongoClient 实例实际上代表一个对数据库的连接池;甚至在多线程时你也只需要一个 MongoClient 的实例。看 concurrency 文档页面获取更多信息。


MongoClient 类被设计成线程安全、线程间共享。典型地,对一个给定的数据库集群你只创建一个实例,并在你的应用中交叉使用。如果由于某些原因你决定创建许多的 MongoClient 实例,请注意:

  • 所有资源使用限制 (最大连接等) 对 应用每个 MongoClient 实例
  • 要销毁一个实例确保你调用了 MongoClient.close()来清除资源
版本 2.10.0的更新:MongoClient 类是版本 2.10.0的新添加的. 先前发布的版本,请使用 Mongo 类代替。

认证 (可选)

当获取数据库被用户名和密码控制认证时,MongoDB 可以运行在安全模式下。此模式下,任何客户端在做任何操作前都要提供用户名和密码。在 Java driver, 你只需用 MongoClient 实例做如下的简单操作:

MongoClient mongoClient = new MongoClient();

DB db = mongoClient.getDB("test");
boolean auth = db.authenticate(myUserName, myPassword);

如果用户名和密码合法,认证成功。否则,失败。如果可能你应该查看 MongoDB 日志获取更多信息。

在一个可信的环境中,大多数用户以不需认证的方式运行MongoDB。

获取一个集合列表

每个数据库有0到多个集合。你可以从 db 中检索其中的一列(并打印出来)。

Set<String> colls = db.getCollectionNames();

for (String s : colls) {
    System.out.println(s);
}

假设在数据库中有两个集合,分别是name 和 address ,你会看到

name
address

这样的输出。

获得一个连接

要获得一个连接,只需指定集合的名称给 getCollection(String collectionName)方法 :

DBCollection coll = db.getCollection("testCollection");

一旦有你有了这个集合对象,你现在可以做如插入数据、查询等事情了。

设置 Write Concern

在版本 2.10.0, 默认的 write concern 是 WriteConcern.ACKNOWLEDGED, 但也很容易改变 :

mongoClient.setWriteConcern(WriteConcern.JOURNALED);

对 write concern 有很多选项. 还有在数据库、集合和独立更新操作中默认的 write concern 可以被覆盖。请看 API Documentation 以获得更多细节。

在版本 2.10.0 中改变了: 之前的版本 2.10.0, 默认的 concern 是 WriteConcern.NORMAL. 在正常情况下,客户端一般会改变这个以确保写入数据库发生问题时能被通知到。

插入一个文档

一旦你有了集合对象,你可以插入文档到集合中。例如,做一个如下的JSON 格式的小文档:

{
   "name" : "MongoDB",
   "type" : "database",
   "count" : 1,
   "info" : {
               x : 203,
               y : 102
             }
}

注意上面的文档包含一个"内置的"文档。要这样做的话,我们可以用 BasicDBObject 类去创建文档(包含内置文档),然后只要用 insert() 方法插入到集合中就可以了。

BasicDBObject doc = new BasicDBObject("name", "MongoDB").
                              append("type", "database").
                              append("count", 1).
                              append("info", new BasicDBObject("x", 203).append("y", 102));

coll.insert(doc);

用 findOne()查找集合中的第一个文档

要看上一步中我们插入的文档,我们可以用一个简单的 findOne() 操作获得集合中的第一个文档。这个方法返回一个独立的文档(不是DBCursor 的 find() 操作返回的),只有一个文档的时候很有用,或者你只对第一个感兴趣 。你不需要处理指针。

DBObject myDoc = coll.findOne();

System.out.println(myDoc);

and you should see

{ "_id" : "49902cde5162504500b45c2c" ,
  "name" : "MongoDB" ,
  "type" : "database" ,
  "count" : 1 ,
  "info" : { "x" : 203 , "y" : 102}}

注意:

 _id 元素已由 MongoDB 自动添加到你的文档。记住, MongoDB 保留以 “_”/”$” 的元素名为内部使用。

添加多个文档

为了用查询做更多有趣的事情,让我们添加多个文档到集合中。这些集合如下:

{
   "i" : value
}

我们可以在一个循环中做得很有效

for (int i=0; i < 100; i++) {
    coll.insert(new BasicDBObject("i", i));
}

注意,我们可以插入不同形态的文档到同一个集合中。这就是我们说的mOngoDB是 "无定势的"。

统计一个集合中的文档数

既然我们已经插入了101个集合 (循环中100个,加上第一个), 我么可以用 getCount() 方法检查他们是否都在。

System.out.println(coll.getCount());

应该打印出 101.

用一个指针获得所有的文档

为了获得集合中的所有文档,我们将用 find() 方法。 find() 方法返回一个 DBCursor 对象,允许我们迭代匹配查询的文档集合。那么查询所有的文档并打印出来。

DBCursor cursor = coll.find();
try {
   while(cursor.hasNext()) {
       System.out.println(cursor.next());
   }
} finally {
   cursor.close();
}

应该打印出集合中的所有101个文档。

用一个查询获得单个集合

我们可以创建一个查询,传一个参数给find() 方法,以获得集合中的一个子集。例如,如果我们想找到"i" 域的值是71的文档,我们可以这么做:

BasicDBObject query = new BasicDBObject("i", 71);

cursor = coll.find(query);

try {
   while(cursor.hasNext()) {
       System.out.println(cursor.next());
   }
} finally {
   cursor.close();
}

应该只打印一个文档

{ "_id" : "49903677516250c1008d624e" , "i" : 71 }

你可能经常会看见 MongoDB 的例子和文档中 使用 $ 操作符,例如:

db.things.find({j: {$ne: 3}, k: {$gt: 10} });

这些在Java driver 中代表正则  String 键, 使用内置 DBObjects:

BasicDBObject query = new BasicDBObject("j", new BasicDBObject("$ne", 3)).
                                      append("k", new BasicDBObject("$gt", 10));

cursor = coll.find(query);

try {
   while(cursor.hasNext()) {
       System.out.println(cursor.next());
   }
} finally {
   cursor.close();
}

用一个查询获得一个文档集合

我们可以用查询从集合中获得一个文档集。例如,如果我们想获得 "i" > 50 的所有文档,我们会这样写:

query = new BasicDBObject("i", new BasicDBObject("$gt", 50));  // e.g. find all where i > 50

cursor = coll.find(query);

try {
   while(cursor.hasNext()) {
       System.out.println(cursor.next());
   }
} finally {
   cursor.close();
}

应该打印出i > 50 的文档。

我们也可以获得一个范围,假如 20 < i <= 30:

query = new BasicDBObject("i", new BasicDBObject("$gt", 20).
                                               append("$lte", 30));  // i.e.   20 < i <= 30
cursor = coll.find(query);

try {
   while(cursor.hasNext()) {
       System.out.println(cursor.next());
   }
} finally {
   cursor.close();
}

管理函数快揽

创建一个索引

MongoDB 支持索引,他们很容易加到一个集合上。要创建一个索引,你只需指定要索引的域,并制定索引是升序(1)还是降序(-1)。下面在i域上创建一个升序索引:

coll.createIndex(new BasicDBObject("i", 1)); // create index on "i", ascending

Getting a List of Indexes on a Collection

You can get a list of the indexes on a collection:

List<DBObject> list = coll.getIndexInfo();

for (DBObject o : list) {
   System.out.println(o);
}

and you should see something like

{ "name" : "i_1" , "ns" : "mydb.testCollection" , "key" : { "i" : 1} }

Getting A List of Databases

You can get a list of the available databases:

MongoClient mongoClient = new MongoClient();

for (String s : mongoClient.getDatabaseNames()) {
   System.out.println(s);
}

删除一个数据库

你可以通过名字用一个 MongoClient 实例删除一个数据库:

MongoClient mongoClient = new MongoClient();
mongoClient.dropDatabase("myDatabase");

相关内容