Mongodb java 例子
来源:互联网 发布:化妆品网络推广方案 编辑:程序博客网 时间:2024/06/04 05:01
该文档是翻译自文档[mongodb-docs-2010-10-24.pdf]的[Java Language Center]章节,根据自己的理解整理而成。
希望能给像我这样开始接触的朋友一点帮助,同时也做个备忘,因为是刚刚学习,其中的很多功能目前都用不上,以后万一有什么功能不太清楚,也可以直接查阅该文档了。
MongoDB Java Driver 简单操作
一、Java驱动一致性
MongoDB的Java驱动是线程安全的,对于一般的应用,只要一个Mongo实例即可,Mongo有个内置的连接池(池大小默认为10个)。
对于有大量写和读的环境中,为了确保在一个Session中使用同一个DB时,我们可以用以下方式保证一致性:
DB和DBCollection是绝对线程安全的,它们被缓存起来了,所以在应用中取到的可能是同一个对象。
二、保存/查找对象(DBObject)
Java驱动提供了DBObject接口,方便我们保存对象到数据库中。
定义需要保存的对象:
public class Tweet implements DBObject {
/** ...... */
}
然后我们可以使用该对象:
三、创建连接
注意:事实上,Mongo实例代表了一个数据库连接池,即使在多线程的环境中,一个Mongo实例对我们来说已经足够了。
四、认证(可选的)
boolean auth = db.authenticate("myUserName", "myPasswd");
五、取得Collection列表
六、获取一个Collection
DBCollection coll = db.getCollection("testCollection");
使用DBCollection,我们可以进行插入、查询数据等数据操作。
七、插入文档
假设有个JSON文档如下所示:
{
"name": "MongoDB",
"type": "database",
"count": 1,
"info": {
x: 203,
y: 102
}
}
注意:上面的JSON文档有个内嵌文档"info"。
我们完全可以利用BasicDBObject来创建一个和上面的JSON一样的文档,并且把它保存在MongoDB中。
为了验证在上面我们保存的类似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
}
使用一个循环插入数据:
我们注意到,同一个coll,我们完全可以插入不同风格的数据,这就是MongoDB的重要特性“模式自由”。
十、统计文档数
现在我们已经有101份文档在数据库中了,现在统计一下看是否正确。
十一、使用游标取得所有的文档
{ "_id" : "49903677516250c1008d624e" , "i" : 71 , "_ns" : "testCollection"}
十三、查询文档集合
根据查询条件,我们可以通过DBCollection从数据库中取出多个对象,比如查询i>50的文档集合:
十四、创建索引
MongoDB支持索引,并且给一个DBCollection添加索引非常简单,你只要指明需要创建索引的字段,然后指明其是升序(1)还是降序(-1)即可,比如在"i"上创建升序索引。
coll.createIndex(new BasicDBObject("i", 1)); // 1代表升序
十五、查询索引
我们可以查询到所有的索引:
{ "name" : "i_1" , "ns" : "mydb.testCollection" , "key" : { "i" : 1} , "_ns" : "system.indexes"}
MongoDB的管理功能
一、获取所有的数据库
二、删除数据库
m.dropDatabase("my_new_db");
MongoDB的Java类型
一、对象ID
ObjectId被用作自动生成的唯一ID.
// 查询所有 "name" 匹配 /joh?n/i 的文档
DBCursor cursor = collection.find(query);
三、日期和时间
四、数据库引用
DBRef可以用来保存数据库引用。
五、二进制数据
字节数组(byte[])被当作二进制数据。
六、内嵌文档
JSON样式的数据如下:
{
"x": {
"y": 3
}
}
则在MongoDB中,Java表示为:
任何继承自List的对象,在MongoDB中,都被当成是数组。
如果想表示如下JSON数据:
则在Java中,应该为:
希望能给像我这样开始接触的朋友一点帮助,同时也做个备忘,因为是刚刚学习,其中的很多功能目前都用不上,以后万一有什么功能不太清楚,也可以直接查阅该文档了。
MongoDB Java Driver 简单操作
一、Java驱动一致性
MongoDB的Java驱动是线程安全的,对于一般的应用,只要一个Mongo实例即可,Mongo有个内置的连接池(池大小默认为10个)。
对于有大量写和读的环境中,为了确保在一个Session中使用同一个DB时,我们可以用以下方式保证一致性:
- DB mdb = mongo.getDB('dbname');
- mdb.requestStart();
- //
- // 业务代码
- //
- mdb.requestDone();
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);
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();
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 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);
- }
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);
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));
- }
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);
long count = coll.getCount(); System.out.println(count);控制台将会输出:101
十一、使用游标取得所有的文档
- DBCursor cursor = coll.find();
- while(cursor.hasNext()) {
- DBObject object = cursor.next();
- System.out.println(object);
- }
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);
- }
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);
- }
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);
- }
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);
- }
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);
- }
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);
ObjectId id = new ObjectId(); ObjectId copy = new ObjectId(id);二、正则表达式
- Pattern john = Pattern.compile("joh?n", CASE_INSENSITIVE);
- DBObject query = new BasicDBObject("name", john);
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);
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();
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);
DBObject y = new BasicDBObject("y", 3); DBObject x = new BasicDBObject("x", y);七、数组
任何继承自List的对象,在MongoDB中,都被当成是数组。
如果想表示如下JSON数据:
- {
- "x": [
- 1,
- 2,
- {"foo": "bar"},
- 4
- ]
- }
{ "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);
0 0
- Mongodb java 例子
- Mongodb java 例子
- mongodb java例子
- java操作mongodb的例子
- mongodb java API查询例子
- mongodb java driver 3.2 学习例子
- Mongodb总结2-Java版本的HelloWorld-CRUD例子
- mongodb查询例子
- 第一个mongoDB例子
- mongodb mapreduce 的例子
- MongoDB基本例子
- python mongodb scrapy例子
- MongoDB 的小例子
- Mongodb简单例子
- Springboot+MongoDB例子
- [mongodb]java操作mongodb
- [mongodb]java操作mongodb
- [MongoDB]MongoDB Java 入门
- Google File System架构
- 软件需求说明书——机房收费系统
- python中的三个内置函数map,reduce,filter
- Matlab之KNN实现
- [转发] 负载均衡的服务器集群上如何进行缓存和会话数据的管理
- Mongodb java 例子
- html基础标签
- python学习笔记-01
- org.apache.catalina.util.DefaultAnnotationProcessor cannot be cast to org.ap解决方案
- android WIFI/2G/3G管理
- 8.HTML5 CSS3
- DWR笔记
- 处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
- 完美解读Linux中文件系统的目录结构