`
wbj0110
  • 浏览: 1586724 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

JAVA封装Mongodb操作之二:MongoOperations

阅读更多

mongoOperation相对于MongoRepository来说,方法更多一些,也更接近于mongo的原生态语言。它的方法包括了MongoRepository的所有方法外,还有分组查询group(),update方法,mapreduce方法以及直接操作collection的方法;好多都是方法的参数里都有query参数。

 

 

体类user如下:

package com.mkyong.user;
public class User {
private String id;
private String firstname;
private String lastname;
private int age;
// getter and setter methods 
}

接下来,我们看具体的操作代码,如下,这里假设要将user类保存到名为userprofile的数据集中。

package com.mkyong.core;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.data.document.mongodb.MongoOperations;
import org.springframework.data.document.mongodb.query.Criteria;
import org.springframework.data.document.mongodb.query.Query;
import org.springframework.data.document.mongodb.query.Update;
import com.mkyong.config.SpringMongoConfig;
import com.mkyong.user.User;
public class App
{
public static void main( String[] args )
{
ApplicationContext ctx 
= new AnnotationConfigApplicationContext(SpringMongoConfig. class );
MongoOperations mongoOperation 
= (MongoOperations)ctx.getBean( " mongoTemplate " );
User user 
= new User( " 1001 " " yong " " mook kim " 30 );
// 保存 
mongoOperation.save( " userprofile " ,user);
// 查找 
User savedUser = mongoOperation.findOne( " userprofile " ,
new Query(Criteria.where( " id " ).is( " 1001 " )),
User.
 class );
System.out.println(
 " savedUser : " + savedUser);
// 更新 
mongoOperation.updateFirst( " userprofile " ,
new Query(Criteria.where( " firstname " ).is( " yong " )), 
Update.update(
 " lastname " " new lastname " ));
User updatedUser 
= mongoOperation.findOne( " userprofile " ,
new Query(Criteria.where( " id " ).is( " 1001 " )),
User.
 class );
System.out.println(
 " updatedUser : " + updatedUser);
// 删除 
mongoOperation.remove( " userprofile " ,
new Query(Criteria.where( " id " ).is( " 1001 " )),
User.
 class );
// 显示当前列表 
List < User > listUser = 
mongoOperation.getCollection(
 " userprofile " , User. class );
System.out.println(
 " Number of user = " + listUser.size());
}
}

 

输出结果如下:

savedUser : User [id = 1001 , firstname = yong, lastname = mook kim, age = 30 ]
updatedUser : User [id
 = 1001 , firstname = yong, lastname = new lastname, age = 30 ]
Number of user 
=

Spring mongodb插入数据

下面详细讲解如何使用spring mongodb插入数据。在spring mongodb中,插入数据到

mongodb有如下几种方法:

User user = new User( " ... " );
// 将user对象保存到"user"这个collection中 
mongoOperation.save(user);
// 将user对象保存到"new collection"这个collection中 
mongoOperation.save( " new collection " ,user);
// 将user对象保存到"user"这个collection中 
mongoOperation.insert(user);
// 将user对象保存到"new collection"这个collection中 
mongoOperation.insert(
 " new collection " , user);
// 将user的对象列表(List)保存到"user"collection中去 
mongoOperation.insertList(userInList);
// 将user的对象列表(List)保存到"new collection"collection中去 
mongoOperation.insertList( " new collection " , userInList);

要注意的是,Spring mongodb中,当没有指定collection时,就会把对象保存到以对象命名的collection中。比如上例中的mongoOperation.insert(user),由于没指定collection的名称,所以会把user对象保存到user这个新建立的collection中。

另外请注意其中的save和insert的区别。它们的区别为:

1)save意思是,当记录不存在时插入,或者是当记录已存在是更新,实际上就是saveorupdate的意思。

2) insert的意思是:当记录不存在时插入,而如果记录存在时则忽略,继续插入。

下面举例子说明:

package com.mkyong.core;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.data.document.mongodb.MongoOperations;
import org.springframework.data.document.mongodb.query.Criteria;
import org.springframework.data.document.mongodb.query.Query;
import com.mkyong.config.SpringMongoConfig;
import com.mkyong.user.User;
public class App {
public static void main(String[] args) {
ApplicationContext ctx 
= new AnnotationConfigApplicationContext(
SpringMongoConfig.
 class );
MongoOperations mongoOperation 
= (MongoOperations) ctx
.getBean(
 " mongoTemplate " );
// 新增一个user对象,并把它放到"ABC"这个collection中 
System.out.println( " Case 1... " );
User userA 
= new User( " 1111 " " user " " A " 99 );
mongoOperation.save(
 " ABC " , userA);
// 查找刚插入的user对象 
User userA1 = mongoOperation.findOne( " ABC " ,
new Query(Criteria.where( " id " ).is( " 1111 " )), User. class );
System.out.println(userA1);
// 插入新的user,放到userB这个collection中去 
System.out.println( " Case 2... " );
User userB 
= new User( " 2222 " " user " " B " 99 );
mongoOperation.save(userB);
// 查找 
User userB1 = mongoOperation.findOne(
new Query(Criteria.where( " id " ).is( " 2222 " )), User. class );
System.out.println(userB1);
// 插入对象列表,放到arraylist中 
System.out.println( " Case 3... " );
User userC 
= new User( " 3333 " " user " " C " 99 );
User userD 
= new User( " 4444 " " user " " D " 99 );
User userE 
= new User( " 5555 " " user " " E " 99 );
List
 < User > userList = new ArrayList < User > ();
userList.add(userC);
userList.add(userD);
userList.add(userE);
mongoOperation.insertList(
 " ABC-List " , userList);
List
 < User > users = mongoOperation.find( " ABC-List " new Query(Criteria
.where(
 " firstname " ).is( " user " )), User. class );
for (User temp : users) {
System.out.println(temp);
}
}
}

 

输出结果如下:

Case 1 ...
User [id
 = 1111 , firstname = user, lastname = A, age = 99 ]
Case 
2 ...
User [id
 = 2222 , firstname = user, lastname = B, age = 99 ]
Case 
3 ...
User [id
 = 3333 , firstname = user, lastname = C, age = 99 ]
User [id
 = 4444 , firstname = user, lastname = D, age = 99 ]
User [id
 = 5555 , firstname = user, lastname = E, age = 99 ]

更新Document

在mongodb中,可以使用save,updateFirst(),updateMulti()方法来进行更新,下面

是相关的例子

public class App {
public static void main(String[] args) {
ApplicationContext ctx 
= new AnnotationConfigApplicationContext(
SpringMongoConfig.
 class );
MongoOperations mongoOperation 
= (MongoOperations) ctx
.getBean(
 " mongoTemplate " );
User user 
= new User( " 1000 " " user-first " " user-last " 17 );
System.out.println(
 " Case 1...by save() " );
mongoOperation.save(user);
User userPrint1 
= mongoOperation.findOne( new Query(Criteria.where( " id " ).is( " 1000 " )), User. class );
System.out.println(userPrint1);
// 修改user对象的lastname 
user.setLastname( " new last name " );
// 更新user对象 
mongoOperation.save(user);
User userPrint2 
= mongoOperation.findOne( new Query(Criteria.where( " id " )
.is(
 " 1000 " )), User. class );
System.out.println(userPrint2);
// Case 2 ... update firstname field, $set 
System.out.println( " Case 2...by updateFirst() - $set " );
// 将id为1000的user对象的firstname属性的值更新为”new firstname” 
mongoOperation.updateFirst( " user " ,
new Query(Criteria.where( " _id " ).is( " 1000 " )),
Update.update(
 " firstname " " new first name " ));
User userPrint3 
= mongoOperation.findOne( new Query(Criteria.where( " id " )
.is(
 " 1000 " )), User. class );
System.out.println(userPrint3);
// 对id为1000的user的age加上10 
System.out.println( " Case 3...by updateFirst() - $inc " );
Update updateAge 
= new Update();
updateAge.inc(
 " age " 10 );
mongoOperation.updateFirst(
 " user " ,
new Query(Criteria.where( " _id " ).is( " 1000 " )), updateAge);
User userPrint4 
= mongoOperation.findOne( new Query(Criteria
.where(
 " _id " ).is( " 1000 " )), User. class );
System.out.println(userPrint4);
}
}

结果为:

Case 1 ...by save()
User [id
 = 1000 , firstname = user - first, lastname = user - last, age = 17 ]
User [id
 = 1000 , firstname = user - first, lastname = new last name, age = 17 ]
Case 
2 ...by updateFirst() - $set
User [id
 = 1000 , firstname = new first name, lastname = new last name, age = 17 ]
Case 
3 ...by updateFirst() - $inc
User [id
 = 1000 , firstname = new first name, lastname = new last name, age = 27 ]

 

此外,还支持使用updateMulti,updateMulti是将所有的对象进行更新,比如:

mongoOperation.updateMulti( " user " ,
new Query(Criteria.where( " firstname " ).is( " yong " )),
Update.update(
 " age " 40 ));

表示将所有firstname为yong的user对象的age属性全部更新为40。

查询Document

在spring mongodb中,可以使用findOne(),find()和getCollection()去查询mongodb,常见的用法如下:

User user = new User( " ... " );
// 找到第一个id=1001的user对象 
User user = mongoOperation.findOne( " test " new Query(Criteria
.where(
 " id " ).is( " 1001 " )), User. class );
// 从test集合中获得所有id<=1000并且age=21的user对象 
List < User > users = mongoOperation.find( " test " new Query(Criteria
.where(
 " id " ).lte( " 2001 " ).and( " age " ).is( 21 )), User. class );
// 从test 集合中获得所有的user对象列表 
List < User > users = mongoOperation.getCollection( " test " , User. class );

删除document

在spring mongodb中, 删除document使用remove方法,示例如下:

在spring mongodb中, 删除document使用remove方法,示例如下:
User user 
= new User( " ... " );
// 删除user集合中的user对象 
mongoOperation.remove(user);
// 删除test集合下的id=2的user对象 
mongoOperation.remove( " test " new Query(Criteria
.where(
 " id " ).is( " 2 " )));
// 删除test集合下的,id=3的user对象,最后并且返回这个被删除的对象 
User deletedUser = mongoOperation.findAndRemove( " test " ,
new Query(Criteria.where( " id " ).is( " 3 " )), User. class );
分享到:
评论

相关推荐

    MongoDB进阶与实战:微服务整合、性能优化、架构管理.docx

    MongoDB 具有强大的查询和索引功能,并且支持各种语言的驱动程序,例如 Java、Python、C#等。在互联网应用和移动应用领域,MongoDB 被广泛用于处理大规模的数据和高并发的读写访问。 MongoDB 的安装与配置是 ...

    MongoDB系列之二:简单操作

    在这个“MongoDB系列之二:简单操作”中,我们将深入探讨MongoDB的基本操作,包括安装、启动、数据插入、查询、更新以及删除等核心功能。 首先,MongoDB的安装通常很简单,支持多种操作系统,如Windows、Linux和...

    java-mongodb底层封装

    本项目针对MongoDB进行了底层封装,旨在提供一套简洁、高效的API,使得开发人员可以更加便捷地进行数据的增删查改操作,无需直接与MongoDB的原生驱动打交道。以下是关于"java-mongodb底层封装"这一主题的详细知识点...

    通过java向mongodb中插入数据

    MongoClient mongoClient = MongoClients.create("mongodb://192.168.46.195:10001"); MongoDatabase database = mongoClient.getDatabase("testDB"); MongoCollection&lt;Document&gt; collection = database....

    java 操作mongodb 增删改查

    MongoClient mongoClient = MongoClients.create("mongodb://root:root@localhost:27017"); // 获取名为"mydb"的数据库 MongoDatabase database = mongoClient.getDatabase("mydb"); ``` 现在,你可以对数据库进行...

    java针对mongo操作的封装,完全面向对象,无需修改,可直接使用

    完全面向对象的mongo封装,maven工程源码,可直接install导出jar包引用,支持基本的增删改查和分页等,使用反射对javaBean实体进行映射,所有方法参数只需要传javaBean就行了,支持带密码连接,即拿即用,无需修改。

    MongoDB系列之一:windows安装

    二、下载MongoDB 访问MongoDB官方网站(https://www.mongodb.com/download-center/community),选择“Community Server”(社区版)并找到适用于Windows的最新稳定版本。通常,下载的是一个名为“mongodb-win32-x86...

    MongoDB应用设计模式:MongoDB Applied Design Patterns

    - **驱动程序选择**:MongoDB支持多种语言的驱动程序,如Python、Java、Node.js等,选择合适的驱动有助于简化开发。 - **设计API**:如何设计RESTful API,使应用与MongoDB交互更高效、简洁。 - **错误处理与异常...

    java实现mongodb数据库的操作

    二、Java驱动程序 Java驱动是MongoDB官方提供的一个用于Java应用的API,它允许开发者通过编写Java代码来操作MongoDB数据库。主要包含以下核心组件: 1. MongoClient:这是连接到MongoDB服务器的主入口点,用于建立...

    java中mongodb使用环境详细配置

    Java 中 MongoDB 使用环境详细配置 Java 中 MongoDB 使用环境详细配置是指在 Windows 平台(WinXP)上安装、运行、安装 Windows 服务的笔记,以作备忘。下面是一些重要的知识点: 1. MongoDB 的下载和安装 ...

    java连接mongodb的jar包

    MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017"); MongoDatabase database = mongoClient.getDatabase("myDatabase"); System.out.println("Connected to MongoDB!"); mongoClient...

    Java连接mongoDB需要的jar包(3.9.1)

    MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017"); MongoDatabase database = mongoClient.getDatabase("testDB"); // ...其他数据库操作 } } ``` 以上代码展示了如何创建一个到...

    java+MongoDB实现存图片、下载图片的方法示例

    本文主要介绍了使用java和MongoDB实现存图片和下载图片的方法,并结合实例形式详细分析了java结合MongoDB实现图片的存储和下载相关操作技巧。 Java和MongoDB简介 在本文中,我们将使用java作为开发语言,并配合...

    java 操作mongodb

    【Java 操作 MongoDB 知识点详解】 MongoDB 是一个流行的开源、分布式文档数据库系统,以其灵活性、高性能和高可用性而受到欢迎。在 Java 开发环境中,可以通过 MongoDB 的 Java 驱动程序来实现对 MongoDB 数据库的...

    java操作mongodb存储文件实例

    将一系列图片文件存储到MongoDB中 java操作mongodb存储文件

    java操作mongoDB(CRUD)

    MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017"); ``` 这里的URL是连接MongoDB服务器的基本格式,"localhost:27017"是默认的MongoDB服务地址和端口。 一旦连接建立,你可以获取...

    java 连接mongodb的操作

    有了配置信息后,我们可以创建`MongoClient`实例来连接MongoDB: ```java MongoClient mongoClient = MongoClients.create(settings); ``` 现在,我们可以通过`mongoClient`访问数据库和集合。例如,要访问名为`...

    java连接mongodb.zip

    MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017"); ``` 2. **数据库选择**:获取或创建一个MongoDB数据库实例,例如`myDatabase`,通过`getDatabase()`方法完成。 ```java ...

    mongodb安装配置及java操作mongodb

    然后,《Mongodb之java操作.doc》将详细介绍如何在Java应用程序中集成和使用MongoDB。Java驱动程序是连接MongoDB的主要方式,文档可能涵盖以下内容: 1. 添加MongoDB Java驱动程序依赖:通常通过Maven或Gradle添加`...

Global site tag (gtag.js) - Google Analytics