mongoDB入门必读(概念与实战并重)(六)
put("i", 71);
cur = coll.find(query);
while(cur.hasNext()){
System.out.println(cur.next());
}
类转换
当把一个类对象存到mongoDB后,从mongoDB取出来时使用setObjectClass()将其转换回原来的类。
public class Tweet implements DBObject {
/* ... */
}
Tweet myTweet = new Tweet();
myTweet.put("user", "bruce");
myTweet.put("message", "fun");
myTweet.put("date", new Date());
collection.insert(myTweet);
//转换
collection.setObjectClass(Tweet);
Tweet myTweet = (Tweet)collection.findOne();
11 使用条件查询获取集合
比较符
"$gt": 大于
"$gte":大于等于
"$lt": 小于
"$lte":小于等于
"$in": 包含
例如,我们想要查询所有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());
}
正则表达式
查询所有名字匹配 /joh n/i 的记录
Pattern pattern = Pattern.compile("joh n", CASE_INSENSITIVE);
BasicDBObject query = new BasicDBObject("name", pattern);
DBCursor cursor = coll.find(query);
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();