mongodb-java-driver基本用法

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 1、先下载mongodb-java-driver 目前最新版本是2.9.3 2、下面是基本的CRUD示例代码: 1 package com.cnblogs.yjmyzz.cache.test; 2 3 import com.

1、先下载mongodb-java-driver 目前最新版本是2.9.3

2、下面是基本的CRUD示例代码:

  1 package com.cnblogs.yjmyzz.cache.test;
  2 
  3 import com.google.gson.Gson;
  4 import com.mongodb.BasicDBObject;
  5 import com.mongodb.DB;
  6 import com.mongodb.DBCollection;
  7 import com.mongodb.DBCursor;
  8 import com.mongodb.DBObject;
  9 import com.mongodb.Mongo;
 10 import com.mongodb.util.JSON;
 11 
 12 import java.net.UnknownHostException;
 13 import java.util.Calendar;
 14 import java.util.Date;
 15 import java.util.HashMap;
 16 import java.util.HashSet;
 17 import java.util.Map;
 18 import java.util.Set;
 19 
 20 import org.junit.Test;
 21 
 22 public class TestMongoDriver {
 23 
 24     @Test
 25     public void testCRUD() throws UnknownHostException {
 26         // 连接到mongodb
 27         Mongo mongo = new Mongo("localhost", 27017);
 28 
 29         // 打开数据库test
 30         DB db = mongo.getDB("test");
 31 
 32         // 遍历所有集合的名字
 33         Set<String> colls = db.getCollectionNames();
 34         for (String s : colls) {
 35             System.out.println(s);
 36             // 先删除所有Collection(类似于关系数据库中的"表")
 37             if (!s.equals("system.indexes")) {
 38                 db.getCollection(s).drop();
 39             }
 40         }
 41 
 42         // 取得集合emp(若:emp不存在,mongodb将自动创建该集合)
 43         DBCollection coll = db.getCollection("emp");
 44 
 45         // delete all
 46         DBCursor dbCursor = coll.find();
 47         for (DBObject dbObject : dbCursor) {
 48             coll.remove(dbObject);
 49         }
 50 
 51         // create
 52         BasicDBObject doc = new BasicDBObject("name", "杨俊明").append("sex", "男")
 53                 .append("address",
 54                         new BasicDBObject("postcode", "201202").append(
 55                                 "street", "田林路888号").append("city", "上海"));
 56         coll.insert(doc);
 57 
 58         // retrieve
 59         BasicDBObject docFind = new BasicDBObject("name", "杨俊明");
 60         DBObject findResult = coll.findOne(docFind);
 61         System.out.println(findResult);
 62 
 63         // update
 64         doc.put("sex", "MALE");// 把sex属性从"男",改成"MALE"
 65         coll.update(docFind, doc);
 66         findResult = coll.findOne(docFind);
 67         System.out.println(findResult);
 68 
 69         coll.dropIndexes();// 先删除所有索引
 70         // create index
 71         coll.createIndex(new BasicDBObject("name", 1)); // 1代表升序
 72 
 73         // 复杂对象
 74         UserData userData = new UserData("jimmy", "123456");
 75         Set<String> pets = new HashSet<String>();
 76         pets.add("cat");
 77         pets.add("dog");
 78         Map<String, String> favoriteMovies = new HashMap<String, String>();
 79         favoriteMovies.put("dragons", "Dragons II");
 80         favoriteMovies.put("avator", "Avator I");
 81         userData.setFavoriteMovies(favoriteMovies);
 82         userData.setPets(pets);
 83         userData.setBirthday(getDate(1990, 5, 1));
 84         BasicDBObject objUser = new BasicDBObject("key", "jimmy").append(
 85                 "value", toDBObject(userData));
 86         coll.insert(objUser);
 87         System.out.println(coll.findOne(objUser));
 88     }
 89 
 90     /**
 91      * 将普通Object对象转换成mongodb的DBObject对象
 92      * 
 93      * @param obj
 94      * @return
 95      */
 96     private DBObject toDBObject(Object obj) {
 97         Gson gson = new Gson();
 98         String json = gson.toJson(obj);
 99         return (DBObject) JSON.parse(json);
100     }
101 
102     /**
103      * 获取指定日期
104      * 
105      * @param year
106      * @param month
107      * @param day
108      * @return
109      */
110     private Date getDate(int year, int month, int day) {
111         Calendar calendar = Calendar.getInstance();
112         calendar.clear();
113         calendar.set(year, month - 1, day);
114         return calendar.getTime();
115 
116     }
117 
118 }

 

其中,为了演示复杂对象的持久化,类UserData定义如下:

package com.cnblogs.yjmyzz.cache.test;

import java.io.Serializable;
import java.util.Date;
import java.util.Map;
import java.util.Set;

public class UserData implements Serializable {

    private static final long serialVersionUID = -4770493237851400594L;
    private String userName;
    private String password;
    private Set<String> pets;
    private Map<String, String> favoriteMovies;
    private Date birthday;

    public UserData() {
    }

    public UserData(String userName, String passWord) {
        this.userName = userName;
        this.password = passWord;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Set<String> getPets() {
        return pets;
    }

    public void setPets(Set<String> pets) {
        this.pets = pets;
    }

    public Map<String, String> getFavoriteMovies() {
        return favoriteMovies;
    }

    public void setFavoriteMovies(Map<String, String> favoriteMovies) {
        this.favoriteMovies = favoriteMovies;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

 

运行效果如下:

emp
system.indexes
{ "_id" : { "$oid" : "53d34795744ec171e7f6980a"} , "name" : "杨俊明" , "sex" : "男" , "address" : { "postcode" : "201202" , "street" : "田林路888号" , "city" : "上海"}}
{ "_id" : { "$oid" : "53d34795744ec171e7f6980a"} , "name" : "杨俊明" , "sex" : "MALE" , "address" : { "postcode" : "201202" , "street" : "田林路888号" , "city" : "上海"}}
{ "_id" : { "$oid" : "53d34796744ec171e7f6980b"} , "key" : "jimmy" , "value" : { "userName" : "jimmy" , "password" : "123456" , "pets" : [ "cat" , "dog"] , "favoriteMovies" : { "dragons" : "Dragons II" , "avator" : "Avator I"} , "birthday" : "May 1, 1990 12:00:00 AM"}}

延伸阅读:
mondodb-java-driver 官方在线文档

8天学通mongodb系列

MongoDB基本用法

搭建高可用的MongoDB集群(上):MongoDB的配置与副本集

搭建高可用mongodb集群(二)—— 副本集

搭建高可用mongodb集群(三)—— 深入副本集内部机制
搭建高可用mongodb集群(四)—— 分片

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
3月前
|
NoSQL Java MongoDB
SpringBoot中MongoDB的那些高级用法
本文探讨了在Spring Boot项目中使用MongoDB的多种方式及其高级用法。MongoDB作为一种NoSQL数据库,在某些场景下相较于SQL数据库有着独特的优势。文中详细介绍了在Spring Boot中使用MongoDB的三种主要方式:直接使用官方SDK、使用Spring JPA以及使用MongoTemplate,并对比分析了它们之间的差异。此外,文章深入讲解了Spring Data MongoDB提供的各种注解(如@Id, @Document, @Field等)以简化操作流程,并探讨了MongoTemplate监听器的应用,如设置主键值、记录日志等。
164 2
|
4月前
|
Java
Java中的equals()与==的区别与用法
【7月更文挑战第28天】
67 12
|
16天前
|
存储 安全 Java
深入理解Java中的FutureTask:用法和原理
【10月更文挑战第28天】`FutureTask` 是 Java 中 `java.util.concurrent` 包下的一个类,实现了 `RunnableFuture` 接口,支持异步计算和结果获取。它可以作为 `Runnable` 被线程执行,同时通过 `Future` 接口获取计算结果。`FutureTask` 可以基于 `Callable` 或 `Runnable` 创建,常用于多线程环境中执行耗时任务,避免阻塞主线程。任务结果可通过 `get` 方法获取,支持阻塞和非阻塞方式。内部使用 AQS 实现同步机制,确保线程安全。
|
2月前
|
Java
Java 正则表达式高级用法
Java 中的正则表达式是强大的文本处理工具,用于搜索、匹配、替换和分割字符串。`java.util.regex` 包提供了 `Pattern` 和 `Matcher` 类来高效处理正则表达式。本文介绍了高级用法,包括使用 `Pattern` 和 `Matcher` 进行匹配、断言(如正向和负向前瞻/后顾)、捕获组与命名组、替换操作、分割字符串、修饰符(如忽略大小写和多行模式)及 Unicode 支持。通过这些功能,可以高效地处理复杂文本数据。
|
2月前
|
存储 Java 数据处理
Java 数组的高级用法
在 Java 中,数组不仅可以存储同类型的数据,还支持多种高级用法,如多维数组(常用于矩阵)、动态创建数组、克隆数组、使用 `java.util.Arrays` 进行排序和搜索、与集合相互转换、增强 for 循环遍历、匿名数组传递以及利用 `Arrays.equals()` 比较数组内容。这些技巧能提升代码的灵活性和可读性,适用于更复杂的数据处理场景。
|
2月前
|
JavaScript 前端开发 NoSQL
MongoDB基本用法
MongoDB基本用法
20 6
|
2月前
|
安全 Java
Java switch case隐藏用法
在 Java 中,`switch` 语句是一种多分支选择结构,常用于根据变量值执行不同代码块。除基本用法外,它还有多种进阶技巧,如使用字符串(Java 7 开始支持)、多个 `case` 共享代码块、不使用 `break` 实现 “fall-through”、使用枚举类型、使用表达式(Java 12 及以上)、组合条件以及使用标签等。这些技巧使代码更加简洁、清晰且高效。
|
3月前
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
44 2
|
3月前
|
NoSQL Java MongoDB
SpringBoot中MongoDB的那些骚操作用法
MongoDB作为一种NoSQL数据库,在不需要传统SQL数据库的表格结构的情况下,提供了灵活的数据存储方案。在Spring Boot中可以通过官方SDK、Spring JPA或MongoTemplate等方式集成MongoDB。文章重点介绍了Spring Data MongoDB提供的注解功能,例如`@Id`、`@Document`和`@Field`等,这些注解简化了Java对象到MongoDB文档的映射。此外,文中还讨论了MongoTemplate监听器的使用,包括设置主键值和日志记录等高级特性。
214 0
SpringBoot中MongoDB的那些骚操作用法
|
4月前
|
Java
java中return,break以及continue的用法
java中return,break以及continue的用法
47 10
下一篇
无影云桌面