Java操作MongoDB

首先是连接到数据库,网上不少博客用的api还是new MongoClient(addrs,credentials)和com.mongodb.DB,这两个api已经过时,被标上横杠杠了,虽然仍然可以用。

下面是连接数据库的代码:

 1 import com.mongodb.*;
 2 import com.mongodb.client.FindIterable;
 3 import com.mongodb.client.MongoCollection;
 4 import com.mongodb.client.MongoDatabase;
 5 import org.bson.Document;
 6 
 7 public class TestMongo {
 8     public static void main(String[] args) {
 9         /*
10         * 连接mongo的uri格式:  mongodb://用户名:用户密码@服务器地址:端口/账号登陆的数据库
11         * 比如这个用户账号是在admin创建的,就要在admin登陆,然后再操作其它数据库
12         * */
13         String sURI=String.format("mongodb://%s:%s@%s:%d/%s", "liumaowu", "liumaowu", "localhost", 27017, "admin");
14         MongoClientURI uri = new MongoClientURI(sURI);
15         MongoClient mongoClient=new MongoClient(uri);
16         MongoDatabase db=mongoClient.getDatabase("test_lliumaowu");    //选择要进行操作的数据库
17         MongoCollection<Document> coll=db.getCollection("test_liumaowu");    //选择要进行操作的集合,我这里集合名和数据库名一样了
18     }
19 }

这是需要验证用户的连接方式,如果不需要验证用户的话,可以直接使用 MongoClient mongoClient=new MongoClient("localhost",27017); 来连接到数据库。

创建集合使用 db.createCollection("mycoll"); mycoll是集合名

查询

1 Document d=new Document().append("grade",16);
2 FindIterable<Document> documents = coll.find(d);
3 for(Document doc:documents){
4   System.out.println(doc);
5   System.out.println(doc.toJson());
6   System.out.println(doc.get("_id"));
7   System.out.println(doc.get("name"));
8 }
查询结果如下:
Document{{_id=5b4d47da6e7761983711e656, name=2b, age=30.0, grade=16.0, friends=[1a, 9n]}}
{ "_id" : { "$oid" : "5b4d47da6e7761983711e656" }, "name" : "2b", "age" : 30.0, "grade" : 16.0, "friends" : ["1a", "9n"] }
5b4d47da6e7761983711e656
2b

我们可以看出,find()方法的返回结果是一种Iterable,Iterable接口只有一个方法Iterator()来转换成Iterator对象。iterable和iterator的区别是:iterable可以使用for each遍历,iterator不可以,必须使用next()、hasNext()方法。

MongoDB储存数据的格式是bson,是一种很类似json的格式,我们用Document对象来接收查询到的结果,使用get(key值),可以获取想要的数据,也可以把结果转换成json对象。

如果想要查询全部结果,不加条件的话,可以去掉fin()方法中的参数,如 FindIterable<Document> documents = coll.find(); 

MongoCollection里面没有findOne()方法了,查一个可以用

coll.find().limit(1).iterator().next();

 

更新

1 coll.updateOne(new Document("grade",16),new Document("$inc",new Document("grade",5)));
2 Document d=new Document().append("name","2b");
3 FindIterable<Document> documents = coll.find(d);
4 for(Document doc:documents){
5     System.out.println(doc.toJson());
6 }

方便理解的话,这里每有一个new Document 代表mongo中一个花括号,所以update的两个参数代表 .update({"grade",16},{$inc:{"grade":5}}) ,$set同理.

但是,如果不使用$set或者$inc的话,在mongodb里会直接替换掉原数据,而在java中会报错,想要替换可以使用 coll.findOneAndReplace() 

删除

这个有deleteMany和deleteOne方法,与find参数填写方法大同小异。

添加

1 Document docInsert=new Document()
2      .append("name","1a")
3      .append("age",40)
4      .append("grade",90);
5 List<Document> documents=new ArrayList<>();
6 documents.add(docInsert);
7 //coll.insertOne(docInsert); 
8 coll.insertMany(documents);

 

posted @ 2018-07-17 15:59  陆卯伍  阅读(418)  评论(0编辑  收藏  举报