`

Java MongoDB : Update document(译)

阅读更多

 

原文出自:http://www.mkyong.com/mongodb/java-mongodb-update-document/

返回目录:http://ysj5125094.iteye.com/blog/2192754  

 

Java MongoDB : Update document

In this tutorial, we show you how to use Java MongoDB API collection.update() to update documents.

译:在本教程中,我们将向您展示如何使用MongoDB Java API的 collection.update() 更新文件。

Test Data

 

Assume following data / documents are inserted.

译:假设以下是插入的数据/文件。

 

{
	"hosting" : "hostA",
	"type" : "vps",
	"clients" : 1000
},
{
	"hosting" : "hostB",
	"type" : "dedicated server",
	"clients" : 100
},
{
	"hosting" : "hostC",
	"type" : "vps",
	"clients" : 900
}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostA" , "type" : "vps" , "clients" : 1000}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostB" , "type" : "dedicated server" , "clients" : 100}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostC" , "type" : "vps" , "clients" : 900}

 

1. DBCollection.update() with $set

Find document where hosting = ‘hostB’, and update it’s clients values from 100 to 110.  

译:查找 hosting = 'hostB' 的文档并且更新 client 字段的值(从100改到110)。

 

	BasicDBObject newDocument = new BasicDBObject();
	newDocument.put("clients", 110);
 
	BasicDBObject searchQuery = new BasicDBObject().append("hosting", "hostB");
 
	collection.update(searchQuery, newDocument);

Output... 

 

 

{ "_id" : { "$oid" : "id"} , "hosting" : "hostA" , "type" : "vps" , "clients" : 1000}
{ "_id" : { "$oid" : "id"} , "clients" : 110}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostC" , "type" : "vps" , "clients" : 900}

The document is replaced!? (译:文件被替换了?)
Wait, the entire “hostB” document is replaced with another new document, this is not what we want.

 

译: 等等,整个 'hostB' 文档被另一个新的文档所取代了,这不是我们想要的结果。

 

To update a particular value only, uses $set update modifier.

译:更新一个特定的值,使用 $set 来处理。

 

	BasicDBObject newDocument = new BasicDBObject();
	newDocument.append("$set", new BasicDBObject().append("clients", 110));
 
	BasicDBObject searchQuery = new BasicDBObject().append("hosting", "hostB");
 
	collection.update(searchQuery, newDocument);

Output 

 

 

{ "_id" : { "$oid" : "id"} , "hosting" : "hostA" , "type" : "vps" , "clients" : 1000}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostB" , "type" : "dedicated server" , "clients" : 110}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostC" , "type" : "vps" , "clients" : 900}

 

 

Note
The MongoDB team should create another new API named DBCollection.replace(), many beginners are trapped in this DBCollection.update() API and replace the entire document accidentally. Again, to update a particular value, use $set.

译:整个MongoDB团队应该创建一个新的API 取名 DBCollection.replace(),因为很多新手都受困于这个 DBCollection.update() API 和替换整个文档的意外之间。再次声明,更新一个特定的值要使用 $set。

2. DBCollection.update() with $inc

This example show the use of $inc modifier to increase a particular value. Find document where hosting = ‘hostB’, update it’s ‘clients’ value by increasing the value from 100 to 199, (100 + 99) = 199.

译:这个例子显示,使用 $inc 修改增加一个特定的值。查找到hosting = 'hostB'的文档用新增加特定的值 来修改 'clients' 字段的值,由100改成199(100+99=199)。

 

BasicDBObject newDocument = 
		new BasicDBObject().append("$inc", 
		new BasicDBObject().append("clients", 99));
/* 
BasicDBObject newDocument = 
		new BasicDBObject().append("$inc", 
		new BasicDBObject().append("total clients", 99));
*/

	collection.update(new BasicDBObject().append("hosting", "hostB"), newDocument);

Output 

 

 

{ "_id" : { "$oid" : "id"} , "hosting" : "hostA" , "type" : "vps" , "clients" : 1000}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostB" , "type" : "dedicated server" , "clients" : 199}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostC" , "type" : "vps" , "clients" : 900}

 

3. DBCollection.update() with multi

This example show the use of multi parameter to update a set of matched documents. Find document where type = ‘vps’, update all the matched documents’ ‘clients’ value to 888. 

译:这个例子显示,使用 multi 参数更新设置匹配的文档。查找type='vps'的文档,更新所有匹配文档的'clients'字段为888.

 

	BasicDBObject updateQuery = new BasicDBObject();
	updateQuery.append("$set", 
		new BasicDBObject().append("clients", "888"));
 
	BasicDBObject searchQuery = new BasicDBObject();
	searchQuery.append("type", "vps");
 
	collection.updateMulti(searchQuery, updateQuery);			
 
	//below statement set multi to true.
	//collection.update(searchQuery, updateQuery, false, true);

Output 

 

 

{ "_id" : { "$oid" : "id"} , "hosting" : "hostA" , "clients" : "888" , "type" : "vps"}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostB" , "type" : "dedicated server" , "clients" : 100}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostC" , "clients" : "888" , "type" : "vps"}

Note
If update without the multi set to true. 

译:如果update的multi没有设置为true。

 

 

	BasicDBObject updateQuery = new BasicDBObject();
	updateQuery.append("$set", 
		new BasicDBObject().append("clients", "888"));
 
	BasicDBObject searchQuery = new BasicDBObject();
	searchQuery.append("type", "vps");
 
	collection.update(searchQuery, updateQuery);

You will noticed that only the first matched document is updated.

译:你会注意到,只有第一个匹配的文档更新。

{"_id":{ "$oid" : "x"} , "hosting" : "hostA" , "clients" : "888" , "type" : "vps"}
{"_id":{ "$oid" : "x"} , "hosting" : "hostB" , "type" : "dedicated server" , "clients" : 100}
{"_id":{ "$oid" : "x"} , "hosting" : "hostC" , "type" : "vps" , "clients" : 900}

To update a set of matched documents, you need to set “multi” to true.

译:更新一组匹配的文件,你需要设置“multi”为true。

 

4. Full Example

Full example by combining above code snippets.

译:结合上面的代码片段的完整示例。

package com.mkyong.core;
 
import java.net.UnknownHostException;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
 
/**
 * Java MongoDB update document
 * 
 * @author mkyong
 * 
 */
 
public class UpdateApp {
 
	public static void printAllDocuments(DBCollection collection) {
		DBCursor cursor = collection.find();
		while (cursor.hasNext()) {
			System.out.println(cursor.next());
		}
	}
 
	public static void removeAllDocuments(DBCollection collection) {
		collection.remove(new BasicDBObject());
	}
 
	public static void insertDummyDocuments(DBCollection collection) {
		BasicDBObject document = new BasicDBObject();
		document.put("hosting", "hostA");
		document.put("type", "vps");
		document.put("clients", 1000);
 
		BasicDBObject document2 = new BasicDBObject();
		document2.put("hosting", "hostB");
		document2.put("type", "dedicated server");
		document2.put("clients", 100);
 
		BasicDBObject document3 = new BasicDBObject();
		document3.put("hosting", "hostC");
		document3.put("type", "vps");
		document3.put("clients", 900);
 
		collection.insert(document);
		collection.insert(document2);
		collection.insert(document3);
	}
 
	public static void main(String[] args) {
 
	try {
 
	  Mongo mongo = new Mongo("localhost", 27017);
	  DB db = mongo.getDB("yourdb");
 
	  // get a single collection
	  DBCollection collection = db.getCollection("dummyColl");
 
	  System.out.println("Testing 1...no $set");
 
	  insertDummyDocuments(collection);
 
	  // find hosting = hostB, and update the clients to 110
	  BasicDBObject newDocument = new BasicDBObject();
	  newDocument.put("clients", 110);
 
	  BasicDBObject searchQuery = new BasicDBObject().append("hosting", "hostB");
 
	  collection.update(searchQuery, newDocument);
 
	  printAllDocuments(collection);
	  removeAllDocuments(collection);
 
	  System.out.println("\nTesting 1...with $set");
 
	  insertDummyDocuments(collection);
 
	  BasicDBObject updateDocument = new BasicDBObject();
	  updateDocument.append("$set", new BasicDBObject().append("clients", 110));
 
	  BasicDBObject searchQuery2 = new BasicDBObject().append("hosting", "hostB");
 
	  collection.update(searchQuery2, updateDocument);
 
	  printAllDocuments(collection);
	  removeAllDocuments(collection);
 
	  System.out.println("\nTesting 2... with $inc");
	  insertDummyDocuments(collection);
	  // find hosting = hostB and increase it's "clients" value by 99
	  BasicDBObject newDocument2 = new BasicDBObject().append("$inc",
		new BasicDBObject().append("clients", 99));
 
	  collection.update(new BasicDBObject().append("hosting", "hostB"), newDocument2);
 
	  printAllDocuments(collection);
	  removeAllDocuments(collection);
 
	  System.out.println("\nTesting 3... with $multi");
 
	  insertDummyDocuments(collection);
	  // find type = vps , update all matched documents , clients value to 888
	  BasicDBObject updateQuery = new BasicDBObject();
	  updateQuery.append("$set", new BasicDBObject().append("clients", "888"));
 
	  BasicDBObject searchQuery3 = new BasicDBObject();
	  searchQuery3.append("type", "vps");
 
	  collection.updateMulti(searchQuery3, updateQuery);
	  // collection.update(searchQuery3, updateQuery, false, true);
 
	  printAllDocuments(collection);
	  removeAllDocuments(collection);
 
	  System.out.println("Done");
 
	} catch (UnknownHostException e) {
		e.printStackTrace();
	} catch (MongoException e) {
		e.printStackTrace();
	}
 
    }
}

Output 

Testing 1...no $set
{ "_id" : { "$oid" : "id"} , "hosting" : "hostA" , "type" : "vps" , "clients" : 1000}
{ "_id" : { "$oid" : "id"} , "clients" : 110}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostC" , "type" : "vps" , "clients" : 900}
 
Testing 1...with $set
{ "_id" : { "$oid" : "id"} , "hosting" : "hostA" , "type" : "vps" , "clients" : 1000}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostB" , "type" : "dedicated server" , "clients" : 110}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostC" , "type" : "vps" , "clients" : 900}
 
Testing 2... with $inc
{ "_id" : { "$oid" : "id"} , "hosting" : "hostA" , "type" : "vps" , "clients" : 1000}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostB" , "type" : "dedicated server" , "clients" : 199}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostC" , "type" : "vps" , "clients" : 900}
 
Testing 3... with $multi
{ "_id" : { "$oid" : "id"} , "hosting" : "hostB" , "type" : "dedicated server" , "clients" : 100}
{ "_id" : { "$oid" : "id"} , "hosting" : "hostC" , "type" : "vps" , "clients" : 900}
{ "_id" : { "$oid" : "id"} , "clients" : "888" , "hosting" : "hostA" , "type" : "vps"}
Done

References

  1. How to do updating in MongoDB
  2. $set update modifier
  3. $inc update modifier
  4. Java MongoDB APIs , DBCollection JavaDoc

 

0
0
分享到:
评论

相关推荐

    Spring Data MongoDB : Update document

    在分析源码时,我们可以看到Spring Data MongoDB是如何将Java对象映射到MongoDB文档,以及如何生成更新语句的。这有助于我们更好地理解其工作原理,优化性能,以及解决潜在的问题。 总的来说,Spring Data MongoDB...

    java 操作mongodb 增删改查

    在Java编程环境中,MongoDB是一个广泛使用的文档型数据库,它以JSON格式存储数据,提供了高性能、高可用性和可扩展性。本教程将详细介绍如何使用Java进行MongoDB的基本操作,包括增(添加数据)、删(删除数据)、改...

    java实现mongodb数据库的操作

    4. Document:用来构建和操作MongoDB文档的类,类似于JSON对象。 三、安装MongoDB 在使用Java驱动之前,首先需要在本地或服务器上安装MongoDB。通常,可以从官方网站下载对应操作系统的安装包,按照安装指南完成...

    java操作mongoDB(CRUD)

    Java操作MongoDB主要涉及到的是Java驱动程序与MongoDB数据库之间的交互,这涵盖了创建连接、执行CRUD(创建、读取、更新、删除)操作等一系列基本的数据库管理任务。MongoDB是一个流行的NoSQL数据库,以其灵活性、高...

    Mongodb数据库JAVA操作例子

    在Java应用程序中,我们通常使用Java驱动程序来与MongoDB进行交互。本篇将详细介绍如何利用Java实现MongoDB数据库的增、删、改、查(CRUD)操作。 1. **连接MongoDB** 要使用Java连接MongoDB,首先需要引入MongoDB...

    MongoDB之Java使用例子

    在这个“MongoDB之Java使用例子”中,我们将深入探讨如何在Java环境中操作MongoDB数据库,包括增、删、改、查(CRUD)操作以及图像数据的存储和检索。 首先,Java与MongoDB的交互主要通过MongoDB的Java驱动程序实现...

    java连接mongodb3.4.2所需jar

    Java连接MongoDB 3.4.2主要涉及的是Java驱动程序的使用,这些驱动程序是MongoDB官方提供的Java API,允许Java开发者与MongoDB数据库进行交互。在给定的文件列表中,我们可以看到三个关键的JAR文件: 1. `mongodb-...

    java连接mongodb.zip

    在这个“java连接mongodb.zip”压缩包中,包含了实现这一连接所需的两个关键元素:mongo-java-driver-3.11.2.jar(MongoDB的Java驱动程序)和MongoDBClient.java(一个可能包含连接MongoDB实例的Java源代码示例)。...

    mongodb_java_demo

    Java驱动程序(mongodb_java_driver)是MongoDB官方提供的用于Java应用程序与MongoDB交互的库,它允许开发者通过简单的API来执行各种数据库操作,如增、删、改、查。 在"mongodb_java_demo"这个项目中,我们将深入...

    Java操作MongoDB之CRUD(增删改查)

    这篇博文“Java操作MongoDB之CRUD(增删改查)”主要探讨了如何使用Java驱动程序来执行基本的数据库操作,包括创建(Create)、读取(Read)、更新(Update)和删除(Delete)。 首先,我们来了解MongoDB的Java驱动...

    java 连接mongodb的操作

    Java连接MongoDB是Java开发中常见的一项任务,用于与NoSQL数据库进行交互。MongoDB是一个高性能、开源、无模式的文档型数据库,广泛应用于数据存储和处理。在Java环境中,我们通常使用MongoDB的Java驱动程序来实现...

    Java MongoDB 增删改查Demo程序

    在本文中,我们将深入探讨如何使用Java来与MongoDB数据库进行交互,主要涵盖增、删、改、查(CRUD)等基本操作。MongoDB是一个流行的NoSQL数据库系统,以其灵活性、高性能和易于扩展性而受到开发者的青睐。Java作为...

    mongodb_java_2.6_API

    MongoDB的数据模型是基于BSON(Binary JSON),在Java API中表现为`Document`类。可以创建、修改和操作`Document`对象,然后将其存储到集合中。 ```java Document doc = new Document("name", "John").append(...

    mongodb java Driver

    MongoDB Java驱动程序是Java开发者用来与MongoDB数据库进行交互的一种关键工具。它提供了一组丰富的API,使得在Java应用程序中执行CRUD(创建、读取、更新、删除)操作变得简单而高效。MongoDB是一个分布式文档存储...

    mongodb java简单demo

    在Java开发中,我们通常使用Java驱动程序来与MongoDB进行交互。本篇将详细介绍如何使用Java连接MongoDB,以及进行基本的数据操作:创建集合、添加文档、修改文档、查询文档和删除文档。 首先,为了连接MongoDB,...

    mongodb:使用Java的Mongodb

    在Java应用程序中使用MongoDB,可以利用其灵活性和高性能特性,为现代Web应用和大数据处理提供强大的数据存储解决方案。 Java驱动程序是连接Java应用程序与MongoDB服务器的关键组件。MongoDB官方提供了Java驱动程序...

    JAVA操作MongoDB简单增删改查

    在Java编程环境中,MongoDB是一个常用的NoSQL数据库系统,它以JSON格式存储数据,提供了高性能、高可用性和可扩展性。本教程将详细介绍如何使用Java与MongoDB进行交互,包括基本的增删改查(CRUD)操作。首先,我们...

    Java mongodb CRUD 操作代码

    在本文中,我们将深入探讨如何使用Java进行MongoDB的基本CRUD操作,以及如何处理图片的存储、读取和删除。MongoDB是一个流行的NoSQL数据库,它以JSON格式存储数据,而Java是与其交互的常用编程语言。让我们开始探索...

    java连接Mongodb进行增删改查_java连接Mongodb进行增删改查_curiousjop_depthklb_Mong

    在Java编程中,MongoDB是一个常用的NoSQL数据库,它的灵活性和高性能使得它在处理大量非结构化数据时非常受欢迎。本篇文章将详细讲解如何使用Java连接到MongoDB数据库,并进行基本的增删改查操作。 首先,连接...

    MongoDB的Java访问实现(包括文件存储)

    在Java开发中,我们常常需要通过Java驱动程序来与MongoDB进行交互,实现数据的增删查改操作。这篇博客文章将探讨如何在Java中实现对MongoDB的访问,并涉及到文件存储功能。 首先,我们需要引入MongoDB的Java驱动...

Global site tag (gtag.js) - Google Analytics