mongodb-java-driver基本用法

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集群(四)—— 分片

时间: 2024-10-26 07:34:58

mongodb-java-driver基本用法的相关文章

mongodb-MongoDB 3.0 Java Driver在Linux Server下多线程插入数据异常

问题描述 MongoDB 3.0 Java Driver在Linux Server下多线程插入数据异常 使用MongoDB 3.0版本,部署环境为vSphere构建虚拟机,使用Java driver(3.0.0rc1)多线程写入数据到MongoDB,异常信息如下所示: Caused by: java.lang.NullPointerException at com.mongodb.connection.ProtocolHelper.isCommandOk(ProtocolHelper.java:

mongo java driver日期转换问题

Java代码   https://github.com/ewcmsfree/ewcms/wiki/Help-mongo-java-driver-date   mongo java driver日期转换问题   mongo保存日期是一个64-bit整形数.java driver保存Date时会把他自动转换为标准时间GMT.如中国在GMT+8时区,保存2012-01-20 00:00:00到库中,查询后结果竟然是2012-01-19 16:00:00跟想要结果不一致. 可以在com.mongodb.

java的vector 用法

Vector的用法很简单,这已在前面的例子中得到了证明.尽管我们大多数时候只需用addElement()插入对象,用elementAt()一次提取一个对象,并用elements()获得对序列的一个"枚举".但仍有其他一系列方法是非常有用的.同我们对于Java库惯常的做法一样,在这里并不使用或讲述所有这些方法.但请务必阅读相应的电子文档,对它们的工作有一个大概的认识. 1. 崩溃Java Java标准集合里包含了toString()方法,所以它们能生成自己的String表达方式,包括它们

Java枚举类用法实例

  本文实例讲述了Java枚举类用法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 package com.school.stereotype; /** * 活动枚举类型 * @

mongodb java 使用$insert 多出一条数据

问题描述 mongodb java 使用$insert 多出一条数据 使用update 更新一条数据进去的时候原数据没有被覆盖依然保存.代码如下 DBObject key = new BasicDBObject(); key.put("phone", phone); key.put("phoneCode", phoneCode); BasicDBObject updates = new BasicDBObject(); BasicDBObject doc = new

初学者mongodb java连接问题

问题描述 初学者mongodb java连接问题 如图,我看都是这么授权用户名和密码的,为什么我的写出来它说那个方法不属于DB类型 解决方案 Java无法连接MongoDB问题黑马程序员 Java 初学者要理解的问题 解决方案二: 你F3看下这个authenticate方法的参数是什么呢?很明显你调用这个方法的参数类型错误. 解决方案三: 这个方法是否正确 你的对象调用对吗

官网教程安装mongodb c++driver

问题描述 官网教程安装mongodb c++driver 在Linux中按照mongodb官网指导Quickstart Guide (New Driver)安装mongodb c++driver,安装的最后使用命令c++ --std=c++11hellomongo.cpp -o hellomongo $(pkg-config --cflags --libs libmongocxx)时出现错误提示:The program 'c++' can be found in the following pa

java-关于Java object的用法

问题描述 关于Java object的用法 class Student { String name; int age; public boolean equals (Object obj) { Student st = null; if(obj instanceof Student) st =(Student)obj; else return false; if(st.name==this.name&&st.age==this.age) return true; else return f

Java中线程用法总结_java

本文实例总结了Java中线程用法.分享给大家供大家参考.具体分析如下: 1.线程是基本调度单元.共享进程的资源,如内存和文件句柄.但有自己的pc(程序计数器),stack(线程栈)及本地变量 2.线程的优势: a) 充分利用多处理器 b) 可以简化模型.特定任务给特定线程.如servlets及rmi等框架. c) 对异步事件的简单处理.如socket,nio使用更复杂.而现在的操作系统支持更大数量的线程. d) 界面的更佳响应 3.内部锁:synchronized块.互斥.可重入(reentra

Java中channel用法总结_java

本文实例总结了Java中channel用法.分享给大家供大家参考.具体分析如下: 1.Channel接口的定义: public interface Channel { public boolean isOpen( ); public void close( ) throws IOException; } 2.Channel的常见类型: FileChannel, SocketChannel, ServerSocketChannel, and DatagramChannel: FileChannel