【Java使用mongodb-driver来操作mongodb】

Java使用mongodb-driver来操作mongodb

创建新工程

创建新的demo工程,引入MongoDB的jar包的坐标:

<dependencies>
        <!--mongo依赖-->
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver</artifactId>
            <version>3.6.3</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-core</artifactId>
            <version>3.6.3</version>
        </dependency>
    </dependencies>

编写测试代码(普通查询)

在测试包com.cxf.test.MongoTest中,编写如下的测试代码,用于遍历获取所有的数据:

		// 连接mongo服务器
        MongoClient mongoClient = new MongoClient("121.36.25.190",27017);

        // 获取要操作的数据库
        MongoDatabase mongoDatabase = mongoClient.getDatabase("spitdb");
        //得到要操作的集合
        MongoCollection<Document> mongoCollection =  mongoDatabase.getCollection("spit");
        //得到集合中的所有文档
        FindIterable<Document> findIterable=  mongoCollection.find();
        //遍历
        for (Document document:findIterable) {
            System.out.println("内容为:"+document.getString("content"));
            System.out.println("用户id为:"+document.getString("userid"));
            System.out.println("访问量  :" +document.getInteger("visits"));
        }
        mongoClient.close();

默认的数据类型的浮点型,对应了java 的Double类型.
如果是用NumberInt存储的,那么就用java的Integer类型来接收.
如果是用双引号括起来的, 那么就用String类型接收

每一列的数据类型要固定, 不能乱变。
在这里插入图片描述

条件查询

等于条件查询

在测试类的main方法中,添加如下的代码,即代表了只查询userid为1013的数据.
封装了BasicDBObject 对象中, 把这个对象传递到find方法中,即代表了条件查询

 		//封装查询的条件
        BasicDBObject basicDb = new BasicDBObject("userid", "1013");
        //得到集合中的所有文档
        FindIterable<Document> findIterable=  mongoCollection.find(basicDb);

完整的代码:

/**
 * @description:
 * @author:柴新峰
 * @create:2020/9/7
 */
public class MongoTest {
    public static void main(String[] args) {
        // 连接mongo服务器
        MongoClient mongoClient = new MongoClient("121.36.25.190",27017);
        // 获取要操作的数据库
        MongoDatabase mongoDatabase = mongoClient.getDatabase("spitdb");
        //得到要操作的集合
        MongoCollection<Document> mongoCollection =  mongoDatabase.getCollection("spit");
        //封装查询的条件
        BasicDBObject basicDb = new BasicDBObject("userid", "1013");
        //得到集合中的所有文档
        FindIterable<Document> findIterable=  mongoCollection.find(basicDb);
        //遍历
        for (Document document:findIterable) {
            System.out.println("内容为:"+document.getString("content"));
            System.out.println("用户id为:"+document.getString("userid"));
            System.out.println("访问量  :" +document.getInteger("visits"));
        }
        mongoClient.close();
    }
}

结果输出:
在这里插入图片描述

大于条件查询

查询访问量大于1000的数据
如果用命令来查询大于1000的数据,那么命令如下

db.spit.find({visits:{$gt:1000}})

可以看到是用两个{}的,因此在代码中,就对应了两个BasicDBObject 对象
代码如下
在BasicDBObject对象中嵌套一个BasicDBObject,嵌套的对象用于写入大于的条件。
完整代码如下:

package com.tensquare;

import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

/**
 * @description:
 * @author:柴新峰
 * @create:2020/9/7
 */
public class MongoTest {
    public static void main(String[] args) {
        // 连接mongo服务器
        MongoClient mongoClient = new MongoClient("121.36.25.190",27017);
        // 获取要操作的数据库
        MongoDatabase mongoDatabase = mongoClient.getDatabase("spitdb");
        //得到要操作的集合
        MongoCollection<Document> mongoCollection =  mongoDatabase.getCollection("spit");
        //封装查询的条件
        BasicDBObject basicDb = new BasicDBObject("visits", new BasicDBObject("$gt",1000));
        //得到集合中的所有文档
        FindIterable<Document> findIterable=  mongoCollection.find(basicDb);
        //遍历
        for (Document document:findIterable) {
            System.out.println("内容为:"+document.getString("content"));
            System.out.println("用户id为:"+document.getString("userid"));
            System.out.println("访问量  :" +document.getInteger("visits"));
            System.out.println("****************************************************");
        }
        mongoClient.close();
    }
}

结果输出:
在这里插入图片描述

添加数据到mongo中

通过查看Document的源码,发现其构造方法可以传入一个map,因此通过 map来封装插入的数据.
源码如下:

public Document() {
        this.documentAsMap = new LinkedHashMap();
    }

    public Document(String key, Object value) {
        this.documentAsMap = new LinkedHashMap();
        this.documentAsMap.put(key, value);
    }

    public Document(Map<String, Object> map) {
        this.documentAsMap = new LinkedHashMap(map);
    }

完整代码如下:

package com.tensquare;

import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

import java.util.HashMap;
import java.util.Map;

/**
 * @description:
 * @author:柴新峰
 * @create:2020/9/7
 */
public class MongoTest {
    public static void main(String[] args) {
        // 连接mongo服务器
        MongoClient mongoClient = new MongoClient("121.36.25.190", 27017);

        // 获取要操作的数据库
        MongoDatabase mongoDatabase = mongoClient.getDatabase("spitdb");
        //得到要操作的集合
        MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("spit");
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("_id", "9");
        map.put("content", "测试mongo的添加");
        map.put("userid", "1");
        map.put("visits", "5000");
        Document documentMap = new Document(map);
        //spit为操作的集合,相当于操作的表
        mongoCollection.insertOne(documentMap);
        //得到集合中的所有文档
        FindIterable<Document> findIterable = mongoCollection.find();
        //遍历
        for (Document document : findIterable) {
            System.out.println("内容为:" + document.getString("content"));
            System.out.println("用户id为:" + document.getString("userid"));
            System.out.println("访问量  :" + document.getInteger("visits"));
            System.out.println("****************************************************");
        }
        mongoClient.close();
    }
}

结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Mrchai521/article/details/108448561