当前位置:嗨网首页>书籍在线阅读

05-使用Java更新文档

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

12.4 使用Java更新文档

使用Java更新集合中的文档 在本节中,您将编写一个简单的Java应用程序,它使用DBCollection对象的方法update()来更新示例数据库的一个集合中的既有文档。通过这个示例,您将熟悉如何在Java中使用MongoDB更新运算符来更新文档。程序清单12.7显示了这个示例的代码。 在这个示例中,方法main()连接到MongoDB数据库,获取一个DBCollection对象,再调用其他方法更新文档。方法showWord()显示更新前和更新后的文档。 方法updateDoc()创建一个查询对象,它从数据库获取表示单词left的文档;再创建一个更新对象,它将字段word的值改为lefty,将字段size和stats.consonants的值加1,并将字母y压入到数组字段letters中。方法resetDoc()将文档恢复原样,以演示如何将字段值减1以及如何从数组字段中弹出值。 请执行下面的步骤,创建并运行这个更新示例数据库中文档并显示结果的Java应用程序。 1.确保启动了MongoDB服务器。 2.确保下载并安装了Java MongoDB驱动程序,并运行了生成数据库words的脚本文件code/hour05/generate_words.js。 3.在文件夹code/hour12中新建一个文件,并将其命名为JavaDocUpdate.java。 4.在这个文件中输入程序清单12.7所示的代码。这些代码使用update()来更新文档。 5.将这个文件存盘。 6.打开一个控制台窗口,并切换到目录code/hour12。 7.执行下面的命令来编译这个新建的Java文件: 8.执行下面的命令来运行这个Java应用程序。程序清单12.8显示了这个应用程序的输出。 程序清单12.7 JavaDocUpdate.java:在Java应用程序中更新集合中的文档 程序清单12.8 JavaDocUpdate.java-output:在Java应用程序中更新集合中文档的输出

将文档插入集合后,经常需要使用Java根据数据变化更新它们。DBCollection对象的方法update()让您能够更新集合中的文档,它多才多艺,但使用起来非常容易。下面是方法update()的语法:

update(query, update, [upsert], [multi])

参数query是一个BasicDBObject对象,指定了要修改哪些文档。请求将判断query指定的属性和值是否与文档的字段和值匹配,进而更新匹配的文档。参数update是一个BasicDBObject对象,指定了要如何修改与查询匹配的文档。第8章介绍了可在这个对象中使用的更新运算符。

参数upsert是个布尔值;如果为true且没有文档与查询匹配,将插入一个新文档。参数multi也是一个布尔值;如果为true将更新所有与查询匹配的文档;如果为false将只更新与查询匹配的第一个文档。

例如,对于集合中字段category为new的文档,下面的代码将其字段category改为old。在这里,upsert被设置为false,因此即便没有字段category为new的文档,也不会插入新文档;而multi被设置为true,因此将更新所有匹配的文档:

BasicDBObject query = new BasicDBObject("category", "New");
BasicDBObject update = new BasicDBObject("$set",
     new BasicDBObject("category", "Old"));
update(query, update, false, true);

▼ Try It Yourself

javac JavaDocUpdate.java
java JavaDocUpdate
01 import com.mongodb.MongoClient;
02 import com.mongodb.WriteConcern;
03 import com.mongodb.DB;
04 import com.mongodb.DBCollection;
05 import com.mongodb.DBObject;
06 import com.mongodb.BasicDBObject;
07 import com.mongodb.DBCursor;
08 import com.mongodb.WriteResult;
09 public class JavaDocUpdate {
10    public static void main(String[] args) {
11       try {
12          MongoClient mongoClient = new MongoClient("localhost", 27017);
13          mongoClient.setWriteConcern(WriteConcern.JOURNAL_SAFE);
14          DB db = mongoClient.getDB("words");
15          DBCollection collection = db.getCollection("word_stats");
16          JavaDocUpdate.showWord(collection, "Before update");
17          JavaDocUpdate.updateDoc(collection);
18          JavaDocUpdate.showWord(collection, "After update");
19          JavaDocUpdate.resetDoc(collection);
20          JavaDocUpdate.showWord(collection, "After reset");
21       } catch (Exception e) {
22          System.out.println(e);
23       }
24    }
25    public static void updateDoc(DBCollection collection){
26       BasicDBObject query = new BasicDBObject("word", "left");
27       BasicDBObject update = new BasicDBObject();
28       update.append("$set", new BasicDBObject("word", "lefty"));
29       BasicDBObject inc = new BasicDBObject("size", 1);
30       inc.append("stats.consonants", 1);
31       update.append("$inc", inc);
32       update.append("$push", new BasicDBObject("letters", "y"));
33       WriteResult result = collection.update(query, update,
34                                                      false, false);
35       System.out.println("Update Result: \n" + result.toString());
36    }
37    public static void resetDoc(DBCollection collection){
38       BasicDBObject query = new BasicDBObject("word", "lefty");
39       BasicDBObject update = new BasicDBObject();
40       update.append("$set", new BasicDBObject("word", "left"));
41       BasicDBObject inc = new BasicDBObject("size", -1);
42       inc.append("stats.consonants", -1);
43       update.append("$inc", inc);
44       update.append("$pop", new BasicDBObject("letters", 1));
45       WriteResult result = collection.update(query, update,
46                                                      false, false);
47       System.out.println("Reset Result: \n" + result.toString());
48    }
49    public static void showWord(DBCollection collection, String msg){
50       System.out.println("\n" + msg + ": ");
51       BasicDBObject query = new BasicDBObject("word",
52            new BasicDBObject("$in", new String[]{"left", "lefty"}));
53       DBCursor cursor = collection.find(query);
54       while(cursor.hasNext()) {
55          DBObject doc = cursor.next();
56          System.out.println(doc);
57       }
58    }
59 }
Before update:
{ "_id" : { "$oid" : "52e2992e138a073440e4663c"} ,
  "charsets" : [ { "type" : "consonants" , "chars" : [ "l" , "f" , "t"]} ,
                    { "type" : "vowels" , "chars" : [ "e"]}] ,
  "first" : "l" , "last" : "t" , "letters" : [ "l" , "e" , "f" , "t"] , "size" : 4.0 ,
  "stats" : { "consonants" : 3.0 , "vowels" : 1.0} , "word" : "left"}
Update Result:
{ "serverUsed" : "localhost/127.0.0.1:27017" , "updatedExisting" : true ,
  "n" : 1 , "connectionId" : 38 , "err" : null , "ok" : 1.0}
After update:
{ "_id" : { "$oid" : "52e2992e138a073440e4663c"} ,
  "charsets" : [ { "type" : "consonants" , "chars" : [ "l" , "f" , "t"]} ,
                    { "type" : "vowels" , "chars" : [ "e"]}] ,
  "first" : "l" , "last" : "t" , "letters" : [ "l" , "e" , "f" , "t" , "y"] ,
  "size" : 5.0 , "stats" : { "consonants" : 4.0 , "vowels" : 1.0} , "word" :
  "lefty"}
Reset Result:
{ "serverUsed" : "localhost/127.0.0.1:27017" , "updatedExisting" : true ,
  "n" : 1 , "connectionId" : 38 , "err" : null , "ok" : 1.0}
After reset:
{ "_id" : { "$oid" : "52e2992e138a073440e4663c"} ,
  "charsets" : [ { "type" : "consonants" , "chars" : [ "l" , "f" , "t"]} ,
                    { "type" : "vowels" , "chars" : [ "e"]}] ,
  "first" : "l" , "last" : "t" , "letters" : [ "l" , "e" , "f" , "t"] , "size" : 4.0 ,
  "stats" : { "consonants" : 3.0 , "vowels" : 1.0} , "word" : "left"}