JavaApi操作MongoDB

本文演示了,如何连接到MongoDB,如何选择数据库、表,进行查询的操作。

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sunyuqi.mongodb</groupId>
    <artifactId>java-mongodb</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-sync</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>
    </dependencies>
</project>

CURD操作

package com.sunyuqi.mongodb;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Updates;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.junit.Before;
import org.junit.Test;

import java.util.function.Consumer;

import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Filters.and;
import static com.mongodb.client.model.Projections.*;
import static com.mongodb.client.model.Sorts.*;

public class TestMongoDB {

    MongoCollection<Document> collection;

    @Before
    public void init() {
        // 建立连接
        MongoClient mongoClient = MongoClients.create("mongodb://192.168.130.128:27017");

        // 选择数据库
        MongoDatabase database = mongoClient.getDatabase("testdb");

        // 选择表
        collection = database.getCollection("user");
    }

    // 查询age<=50并且id>=100的用户信息,并且按照id倒序排序,只返回id,age字段,不返回_id字段
    @Test
    public void testQuery() {
        this.collection.find(
                and(
                        lte("age", 30),
                        gte("id", 100)
                )
        ).sort(descending("id"))
                .projection(fields(include("id", "age"),
                        excludeId()))
                .forEach((Consumer<? super Document>) document -> {
                    System.out.println(document.toJson());
                });
    }

    // 插入数据
    @Test
    public void testInsert(){
        Document document = new Document();
        document.append("id", 1000);
        document.append("username", "张三");
        document.append("age", 30);
        this.collection.insertOne(document);

        // 查询该数据
        this.collection.find(eq("id", 1000)).forEach((Consumer<? super Document>) document1 -> {
            System.out.println(document1.toJson());
        });
    }

    // 更新数据
    @Test
    public void testUpdate(){
        UpdateResult updateResult = this.collection.updateOne(eq("id", 1000), Updates.set("age", 40));
        System.out.println(updateResult);

        // 查询该数据
        this.collection.find(eq("id", 1000)).forEach((Consumer<? super Document>) document1 -> {
            System.out.println(document1.toJson());
        });
    }
    // 删除数据
    @Test
    public void testDelete(){
        DeleteResult deleteResult = this.collection.deleteMany(eq("age", 25));
        System.out.println(deleteResult);
    }
}

面向对象操作

前面对MongoDB的操作都是基于Document对象操作,操作略显繁琐,下面我们通过面向对象的方式进行操作。 创建User、Address对象:

package com.sunyuqi.mongodb.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.bson.types.ObjectId;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private ObjectId id;
    private String name;
    private int age;
    private Address address;
}

User中有一个字段为Address,该类定义如下

package com.sunyuqi.mongodb.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Address {
    private String street;
    private String city;
    private String zip;
}

测试对象的CURD

package com.sunyuqi.mongodb;

import com.mongodb.MongoClientSettings;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import com.sunyuqi.mongodb.pojo.Address;
import com.sunyuqi.mongodb.pojo.User;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.bson.types.ObjectId;
import org.junit.Before;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Updates.*;

public class TestUser {

    MongoCollection<User> objectCollection;

    @Before
    public void init() {
        //定义对象的解码注册器
        CodecRegistry pojoCodecRegistry = CodecRegistries.
                fromRegistries(MongoClientSettings.getDefaultCodecRegistry(),
                        CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build())
                );
        // 建立连接
        MongoClient mongoClient = MongoClients.create("mongodb://192.168.130.128:27017");
        // 选择数据库 并且 注册解码器
        MongoDatabase mongoDatabase = mongoClient.getDatabase("testdb")
                .withCodecRegistry(pojoCodecRegistry);
        // 选择表
        this.objectCollection = mongoDatabase
                .getCollection("user_detail", User.class);
    }
    // 插入一条
    @Test
    public void testInsert() {
        User user = new User(ObjectId.get(), "张三", 21,new Address("人民路", "上海市", "123456"));
        this.objectCollection.insertOne(user);
        System.out.println("插入数据成功");
    }

    // 批量插入
    @Test
    public void testInserts() {
        List<User> userList = Arrays.asList(
                new User(ObjectId.get(), "张三", 20, new Address("上海北路", "上海市", "123456")),
                new User(ObjectId.get(), "李四", 21, new Address("北京西路", "北京市", "222222")),
                new User(ObjectId.get(), "王五", 22, new Address("南京东路", "南京市", "333333")),
                new User(ObjectId.get(), "赵六", 23, new Address("陕西南路", "陕西市", "444444")),
                new User(ObjectId.get(), "孙七", 24, new Address("南京西路", "南京市", "555555")));
        this.objectCollection.insertMany(userList);
        System.out.println("插入数据成功");
    }

    // 查询
    @Test
    public void testQuery() {
        this.objectCollection.find(eq("name", "张三"))
                .forEach((Consumer<? super User>) user -> {
                    System.out.println(user);
                });
    }
    // 更新
    @Test
    public void testUpdate() {
        UpdateResult updateResult =
                this.objectCollection.updateMany(eq("name", "张三"), set("age", 22));
        System.out.println(updateResult);
    }
    // 删除
    @Test
    public void testDelete() {
        DeleteResult deleteResult =
                this.objectCollection.deleteMany(eq("name", "张三"));
        System.out.println(deleteResult);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值