mongodb的java驱动_MongoDB的java版本驱动

本文详细介绍了如何使用MongoDB的Java驱动进行数据库连接、认证、获取集合、设置写入关注、插入与查询文档,以及管理索引、数据库实例和删除操作。内容涵盖从建立连接到执行复杂查询的全过程。
摘要由CSDN通过智能技术生成

(1)建立连接

建立一个mongodb的连接,至少应该知道数据库实例的名称(不一定存在。如果不存在,会创建一个新的)

此外,可以指定mongodb

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

在上面的代码中,db代表了连接mongodb中的mydb数据库实例的连接。通过它,可以进行进一步的操作。

注:MongoClient的实例代表

MongoClient被设计成线程安全、可以被多线程共享的。通常访问

所有资源使用限制(最大连接数等等)对每个MongoClient都适用

销毁一个实例时,请确认调用MongoClient.close()方法来清理资源

MongoClient类最早从2.10.0版本引入,先前的版本请使用Mongo类

注:mongodb安装、启动可以参考http://www.cnblogs.com/huangxincheng/archive/2012/02/18/2356595.html

(2)认证(可选)

MongoDB可以运行在安全模式上。当运行在这个模式下时,任何客户端应用在执行任何操作前必须提供用户名、密码。

MongoClient mongoClient = new MongoClient();

DB db = mongoClient.getDB("test");

boolean auth = db.authenticate(myUserName, myPassword);在上面的代码中,如果用户名密码通过

(3)获取所有集合(集合类似于

每个

Set colls = db.getCollectionNames();

for (String s : colls) {

System.out.println(s);

}

如果数据库中存在name、address两个集合,会有如下输出:

name

address

(4)获取单一集合

调用db的getCollection(String collectionName)方法获得单一集合

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

获取到集合对象后,就可以进行添加、查询数据等操作。

(5)设置 write concern

2.10.0及以后版本,默认的write concern是WriteConcern.ACKNOWLEDGED。可以改变默认模式:

mongoClient.setWriteConcern(WriteConcern.JOURNALED);

write concern有很多选项。另外,默认模式可以在

2.10.0以前的版本,默认值是WriteConcern.NORMAL。一般情况,客户端会改变这个值来保证写入数据库如果有问题可以被通知到。

(6)增加文档(类似向

一旦获取集合对象coll,就可以插入一条文档了。例如:插入下面json格式的文档

{

"name" : "MongoDB",

"type" : "database",

"count" : 1,

"info" : {

x : 203,

y : 102

}

}

注意上面存在嵌入的文档。我们可以使用BasicDBObject类创建一个文档(包括嵌入的文档)。然后调用集合coll的插入方法

BasicDBObject doc = new BasicDBObject("name", "MongoDB").

append("type", "database").

append("count", 1).

append("info", new BasicDBObject("x", 203).append("y", 102));

coll.insert(doc);

(7)findOne()方法:查找集合中的第一个文档

通过调用findOne()方法可以获得上一步中我们插入的文档。方法的返回值返回一个单一的文档(与DBCurse的find()方法不同)。当只存在唯一文档或者只关心第一个文档时非常有用。

DBObject myDoc = coll.findOne();

System.out.println(myDoc);

控制台输出如下:

{ "_id" : "49902cde5162504500b45c2c" ,

"name" : "MongoDB" ,

"type" : "database" ,

"count" : 1 ,

"info" : { "x" : 203 , "y" : 102}}注意:_id元素是mongodb自动添加的。请牢记:_"/“$是mongodb的保留字,请勿使用。

(8)添加多条文档

为了方便以后的查询操作,现在向集合中增加多条文档

这些文档的格式为:

{

"i" : value

}通过一个循环添加文档,具体如下:

for (int i=0; i < 100; i++) {

coll.insert(new BasicDBObject("i", i));

}

注意我们可以向一个集合插入不同格式的文档。这就是mongodb模式自由的特性

(8)查询集合中文档总个数

目前,已经向集合中插入101条文档(100条是通过循环添加的,1条是单独添加的)。可以调用getCount()方法查询总个数

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

控制台应该输出101

(9)使用

可以使用find()方法查询集合中的所有文档。方法返回一个DBCursor。这个对象可以遍历查询出的文档集合。下面是查询所有文档并且输出到

DBCursor cursor = coll.find();

try {

while(cursor.hasNext()) {

System.out.println(cursor.next());

}

} finally {

cursor.close();

}控制台应该输出101行文档信息。

(10)查询单一文档

通过向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版本的客户端将无区别的对待他们

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();

}

(11)查询多个文档

通过查询可以获取集合中的多个文档。例如:查询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

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();

}

一些管理相关的功能如下:

(12)创建索引

mongodb支持索引并且添加到集合中也非常方便。创建一个索引,需要指定被索引的字段以及索引方向(1代表升序、2代表降序)。

为字段i添加索引:

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

(13)查询集合上的索引

示例代码:

List list = coll.getIndexInfo();

for (DBObject o : list) {

System.out.println(o);

}

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

(14)查询所有数据库实例名称

示例代码如下:

MongoClient mongoClient = new MongoClient();

for (String s : mongoClient.getDatabaseNames()) {

System.out.println(s);

}

(15)删除

示例代码如下:

MongoClient mongoClient = new MongoClient();

mongoClient.dropDatabase("myDatabase");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值