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

Java使用mongodb-driver来操做mongodb

建立新工程

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

<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中,编写以下的测试代码,用于遍历获取全部的数据:mongodb

// 链接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);

完整的代码:this

/** * @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();
    }
}

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

大于条件查询

查询访问量大于1000的数据
若是用命令来查询大于1000的数据,那么命令以下code

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();
    }
}

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