MongoDB的简单应用--插入,删除,更新

 二维码 243
发表时间:2016-05-24 23:29

一,首先下载MongoDBJava的驱动

下载地址:

http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/installation-guide/?_ga=1.139591411.1779685609.1461846350#mongodb-driver

Maven的话直接复制下面的依赖:

<dependency>

       <groupId>org.mongodb</groupId>

       <artifactId>mongo-java-driver</artifactId>

       <version>3.0.4</version>

</dependency>

二,连接MongoDB的数据库

//默认连接localhost27017端口的Mongodb的数据库服务器

MongoClient mongoClient1 = new MongoClient();

//连接指定ip和端口的MongoDB服务器

MongoClient mongoClient2 = new MongoClient("localhost", 27017);

//根据数据库名字,获取MongoDB的一个数据库

MongoDatabase db = mongoClient2.getDatabase("mydb");


mongoClient2.close();

以下对MongoDB的操作,都是引用db这个对象实例。

三,插入

3.1 插入单条记录

MongoDB的数据库和集合在第一次使用的时候,如果原来不存在,则会自动创建

public static void insert() throws ParseException {

MongoDatabase db = getDB();

DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.CHINA);

Document document = new Document("address",

new Document().append("street", "2 Avenue").append("zipcode", "10075").append("building", "1480")

.append("coord",

asList(-73.9557413, 40.7720266)))

.append("borough",

"Manhattan")

.append("cuisine", "Italian")

.append("grades",

asList(new Document()

.append("date", format.parse("2014-10-01T00:00:00Z"))

.append("grade",

"A")

.append("score", 11),

new Document().append("date", format.parse("2014-01-16T00:00:00Z"))

.append("grade", "B").append("score", 17)))

.append("name", "Vella").append("restaurant_id", "41704620");

db.getCollection("test").insertOne(document);

System.out.println("插入成功");

}

3.2 插入多条记录

这里插入的记录为:{i:value},下面查询的时候会用到

List<Document> documents = new ArrayList<Document>();

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

   documents.add(new Document("i", i));

}

MongoDatabase db = getDB();

db.getCollection("test").insertMany(documents);

四,查询

查询的时候,有时会用到指定条件的查询,这里面有个Filters类,它提供了一些查询条件,方便输入。比如:Filters.eq是等于;Filters.gt是大于;Filters.lt是小于。

db.getCollection("test").find();

4.2 查询一条

Document myDoc = db.getCollection("test").find(Filters.eq("i", 10)).first();

查询结果保证唯一需要在逻辑上面确认,如果你查询出的结果包含多条,只会取出第一条。4.3 查询结果为多个,并遍历结果

public static void querySet(){

MongoDatabase db = getDB();

FindIterable<Document> findResults =  db.getCollection("test").find(Filters.gt("i", 80));

findResults.forEach(new Block<Document>() {

public void apply(Document arg0) {

// TODO Auto-generated method stub

System.out.println("查询结果:" + arg0.toJson());

}

});

}

4.4 嵌入查询

有时候,我们保存的一条记录是包含嵌入记录的,比如:{ "peaple" : { "name" : "wgs" } }

这个时候,如果我们要查询namewgs的记录,代码如下:

public static void embedQuery(){

Document doc = new Document("peaple", new Document("name", "wgs"));

MongoDatabase db = getDB();

db.getCollection("test").insertOne(doc);


Document resultDoc = db.getCollection("test").find(Filters.eq("peaple.name", "wgs")).first();

System.out.println("结果:" + resultDoc.toJson());

}

4.5 多条件查询

有些时候我们的查询条件可能有多个,类似mysql中的,and,or等。MongoDBFilters中也包含了这些条件。这里举一个and的例子,其它的只需要替换一下关键字即可,比如or,只需要把下面例子中的and替换掉就行了。

public static void queryByAnd(){

MongoDatabase db = getDB();

FindIterable<Document> findresults = db.getCollection("test").find(Filters.and(Filters.eq("i", 20),Filters.eq("i", 21)));

findresults.forEach(new Block<Document>() {

public void apply(Document arg0) {

// TODO Auto-generated method stub

System.out.println("结果:" + arg0.toJson());

}

});

}

4.6 查询并排序

使用sort方法,我们可以对搜索结果进行排序

public static void querySort(){

MongoDatabase db = getDB();

FindIterable<Document> findIterable = db.getCollection("test").find(Filters.gt("i", 75)).sort(Sorts.ascending("i"));

findIterable.forEach(new Block<Document>() {

public void apply(Document t) {

// TODO Auto-generated method stub

System.out.println("结果:" + t.toJson());

}

});

}

Sorts是一个静态类,它里面提供了一些排序条件,比如降序或升序。Sorts.ascending("i")表示按i的值的升序排序。括号里面也可以根据多个条件值进行排序,以逗号分隔。

五,更新

5.1 更新一条

public static void updateOne(){

MongoDatabase db = getDB();

db.getCollection("test").updateOne(Filters.eq("i", 99), new Document("$set", new Document("i", 1000)));


}

注意一点的是,这个方法只会更新等于99的第一条记录,也就是说如果有两条记录以上的话,只会更新第一条,其它的不会更新。如果要更新所有满足条件的记录,使用5.2的方法;

5.2 更新多条记录

public static void updateMany(){

MongoDatabase db = getDB();

db.getCollection("test").updateMany(Filters.eq("i", 98), new Document("$set", new Document("i", 1001)));

}

5.3 嵌套更新

只需要使用点符号对key进行引用即可,例如 :

public static void updateMany(){

MongoDatabase db = getDB();

db.getCollection("test").updateMany(Filters.eq("i", 98), new Document("$set", new Document("name.i", 1001)));

}

它的存储结构为:{name:{i:1001}}

5.4 更新整个存储文档

即除了_id之外的,都替换掉,相当于覆盖。

public static void replace(){

MongoDatabase db = getDB();

db.getCollection("test").replaceOne(Filters.eq("i", 96), new Document("ab",101));

}

这个方法和updateOne一样,只会执行一条替换。但是没有提花replaceMany这个方法,所以只能更新一条记录。

6 删除操作

6.1 删除一个集合

db.getCollection("test").drop();

6.2 删除一个记录

db.getCollection("test").deleteOne(Filters.eq("i", 95));  

6.3 删除所有满足条件的记录

db.getCollection("test").deleteMany(Filters.eq("i", 95));