使用Java对MongoDB进行编程,首先要下载驱动包,并导入到项目中,地址如下:
https://github.com/mongodb/mongo-java-driver/downloads
其基本操作如下:
导入包:
import com.mongodb.Mongo;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.DBCursor;
创建连接:
Mongo m = new Mongo();
Mongo m = new Mongo( "localhost" );
Mongo m = new Mongo( "localhost" , 27017 );
创建一个数据库:
DB db = m.getDB( "mydb" );
验证用户名密码:
boolean auth = db.authenticate(myUserName, myPassword);
获得集合(类似于表)列表,显示所有集合的名称:
Set<String> colls = db.getCollectionNames();
for (String s : colls) {
System.out.println(s);
}
创建一个集合:
DBCollection coll = db.getCollection("testCollection");
插入一条记录:
如果插入的内容如下:
{
"name" : "MongoDB",
"type" : "database",
"count" : 1,
"info" : {
x : 203,
y : 102
}
}
则代码如下:
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);
使用findOne()在一个集合中找到第一条记录:
DBObject myDoc = coll.findOne();
System.out.println(myDoc);
由此打印的内容将如下(假设添加了上文中的记录):
{ "_id" : "49902cde5162504500b45c2c" , "name" : "MongoDB" , "type" : "database" , "count" : 1 , "info" : { "x" : 203 , "y" :
102} , "_ns" : "testCollection"}
注意:_id和_ns的内容被自动的添加到了记录中。
添加多条记录:
如果要添加的内容如下:
{
"i" : value
}
则所需要的代码如下:
for (int i=0; i < 100; i++) {
coll.insert(new BasicDBObject().append("i", i));
}
注意:在Mongo里边,可以添加不同形式的数据到同一个集合(表)中,这就是所谓的模式自由(schema-free)。
获得一个集合中记录的条数:
System.out.println(coll.getCount());
使用Cursor(光标?)获得所有记录:
DBCursor cur = coll.find();
while(cur.hasNext()) {
System.out.println(cur.next());
}
通过查询获得一条单独的记录:
例如,如果想获得i值为71的记录:
BasicDBObject query = new BasicDBObject();
query.put("i", 71);
cur = coll.find(query);
while(cur.hasNext()) {
System.out.println(cur.next());
}
这样将打印如下内容:
{ "_id" : "49903677516250c1008d624e" , "i" : 71 , "_ns" : "testCollection"}
也可以使用简化的方法查看:
db.things.find({j: {$ne: 3}, k: {$gt: 10} });
相当于如下代码:
BasicDBObject query = new BasicDBObject();
query.put("j", new BasicDBObject("$ne", 3));
query.put("k", new BasicDBObject("$gt", 10));
cur = coll.find(query);
while(cur.hasNext()) {
System.out.println(cur.next());
}
通过查询获得一系列记录:
例如要获得i值大于50的所有记录:
query = new BasicDBObject();
query.put("i", new BasicDBObject("$gt", 50)); // e.g. find all where i > 50
cur = coll.find(query);
while(cur.hasNext()) {
System.out.println(cur.next());
}
如果要查询i值大于20小于等于30的记录:($gt表示大于,$lte表示小于等于,具体标号可自行查询)
query = new BasicDBObject();
query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30)); // i.e. 20 < i <= 30
cur = coll.find(query);
while(cur.hasNext()) {
System.out.println(cur.next());
}
创建一个索引(index):
coll.createIndex(new BasicDBObject("i", 1)); // create index on "i", ascending
如此,则创建了一个按照i降序排列的索引,1代表升序,-1代表降序。
获得一个集合中索引的列表:
List<DBObject> list = coll.getIndexInfo();
for (DBObject o : list) {
System.out.println(o);
}
如此,怎输出结果如下:
{ "name" : "i_1" , "ns" : "mydb.testCollection" , "key" : { "i" : 1} , "_ns" : "system.indexes"}
获得数据库的列表:
Mongo m = new Mongo();
for (String s : m.getDatabaseNames()) {
System.out.println(s);
}
丢弃一个数据库:
使用Mongo对象可以丢弃一个数据库:
m.dropDatabase("my_new_db");
以上翻译或者表达上的问题还请大家指正。