java MongoDB客户端 增删改查 条件查询

新建maven项目
添加依赖:

<dependencies>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver</artifactId>
        <version>3.12.7</version>
    </dependency>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-async</artifactId>
        <version>3.12.7</version>
    </dependency>
</dependencies>

新建MongoUtil类,用于连接数据库和集合以及关闭连接

import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.result.DeleteResult;
import org.bson.Document;
import org.bson.conversions.Bson;

import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Updates.*;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;

public class MongoUtil {
    private static MongoClient mongoClient;

    public static MongoCollection<Document> connectAndGetCollection(
            String host, String databaseName, String collName) {
        mongoClient = new MongoClient(host);
        MongoDatabase database = mongoClient.getDatabase(databaseName);
        return database.getCollection(collName);
    }

    public static void closeClient() {
        mongoClient.close();
    }
}

MongoMain.java:

public class MongoMain {
    public static void main(String[] args) {
        MongoCollection<Document> collection =
                MongoUtil.connectAndGetCollection("localhost", "database", "inventory");
        MongoMain mongoMain = new MongoMain();

        mongoMain.insertOne(collection);
        mongoMain.insertMany(collection);
        mongoMain.findAll(collection);
        mongoMain.findEq(collection);
        mongoMain.findIn(collection);
        mongoMain.findAnd(collection);
        mongoMain.findOr(collection);
        mongoMain.findAndWithOr(collection);
        mongoMain.updateOne(collection);
        mongoMain.updateMany(collection);
        mongoMain.replaceOne(collection);
        mongoMain.deleteMany(collection);
        mongoMain.deleteManyBy(collection);

        MongoUtil.closeClient();
    }

    /**
     * 插入一条文档,如不存在该集合会自动创建
     * mongo命令:
     * db.inventory.insertOne(
     *    { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
     * )
     */
    private void insertOne(MongoCollection<Document> collection) {
        Document canvas = new Document("item", "canvas")
                .append("qty", 100)
                .append("tags", singletonList("cotton"));
        Document size = new Document("h", 28)
                .append("w", 35.5)
                .append("uom", "cm");
        canvas.put("size", size);
        collection.insertOne(canvas);
    }

    /**
     * 插入多条文档
     * mongo命令:
     * db.inventory.insertMany([
     *    { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
     *    { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
     *    { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
     *    { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
     *    { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
     *    { item: "canvas", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
     *    { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
     *    { item: "mat", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
     *    { item: "mousepad", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
     *    { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
     *    { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
     *    { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
     *    { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
     *    { item: "sketchbook", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
     *    { item: "sketch pad", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
     * ] );
     */
    private void insertMany(MongoCollection<Document> collection) {
        collection.insertMany(asList(
                Document.parse("{ item: 'canvas', qty: 100, size: { h: 28, w: 35.5, uom: 'cm' }, status: 'A' }"),
                Document.parse("{ item: 'journal', qty: 25, size: { h: 14, w: 21, uom: 'cm' }, status: 'A' }"),
                Document.parse("{ item: 'mat', qty: 85, size: { h: 27.9, w: 35.5, uom: 'cm' }, status: 'A' }"),
                Document.parse("{ item: 'mousepad', qty: 25, size: { h: 19, w: 22.85, uom: 'cm' }, status: 'P' }"),
                Document.parse("{ item: 'notebook', qty: 50, size: { h: 8.5, w: 11, uom: 'in' }, status: 'P' }"),
                Document.parse("{ item: 'paper', qty: 100, size: { h: 8.5, w: 11, uom: 'in' }, status: 'D' }"),
                Document.parse("{ item: 'planner', qty: 75, size: { h: 22.85, w: 30, uom: 'cm' }, status: 'D' }"),
                Document.parse("{ item: 'postcard', qty: 45, size: { h: 10, w: 15.25, uom: 'cm' }, status: 'A' }"),
                Document.parse("{ item: 'sketchbook', qty: 80, size: { h: 14, w: 21, uom: 'cm' }, status: 'A' }"),
                Document.parse("{ item: 'sketch pad', qty: 95, size: { h: 22.85, w: 30.5, uom: 'cm' }, status: 'A' }")
        ));
    }

    /**
     * 查询集合中所有文档
     * SQL: SELECT * FROM inventory
     * mongo命令:db.inventory.find( {} )
     */
    private void findAll(MongoCollection<Document> collection) {
        FindIterable<Document> findIterable = collection.find(new Document());
        for (Document document : findIterable) {
            System.out.println(document);
        }
    }

    /**
     * 条件查询 status等于D的文档
     * SQL: SELECT * FROM inventory WHERE status = "D"
     * mongo命令: db.inventory.find( { status: "D" } )
     */
    private void findEq(MongoCollection<Document> collection) {
        Bson eq = eq("status", "D");

        FindIterable<Document> findIterable = collection.find(eq);
        for (Document document : findIterable) {
            System.out.println(document);
        }
    }

    /**
     * In的使用 查出status为 A 或 B的字段
     * SQL: SELECT * FROM inventory WHERE status in ("A", "D")
     * mongo命令:db.inventory.find( { status: { $in: [ "A", "D" ] } } )
     */
    private void findIn(MongoCollection<Document> collection) {
        Bson in = in("status", "A", "D");

        FindIterable<Document> findIterable = collection.find(in);
        for (Document document : findIterable) {
            System.out.println(document);
        }
    }

    /**
     * 查询 status = A and qty < 30 的字段
     * SQL:SELECT * FROM inventory WHERE status = "A" AND qty < 30
     * mongo命令:db.inventory.find( { status: "A", qty: { $lt: 30 } } )
     */
    private void findAnd(MongoCollection<Document> collection) {
        Bson and = and(eq("status", "A"), lt("qty", 30));

        FindIterable<Document> findIterable = collection.find(and);
        for (Document document : findIterable) {
            System.out.println(document);
        }
    }

    /**
     * 查询 status = B or qty < 30 的字段
     * SQL:SELECT * FROM inventory WHERE status = "B" OR qty < 30
     * mongo命令:db.inventory.find( { $or: [ { status: "B" }, { qty: { $lt: 30 } } ] } )
     */
    private void findOr(MongoCollection<Document> collection) {
        Bson or = or(eq("status", "B"), lt("qty", 30));

        FindIterable<Document> findIterable = collection.find(or);
        for (Document document : findIterable) {
            System.out.println(document);
        }
    }

    /**
     * 查询 status等于A 和 ( qty小于30 或 item以p开头) 的字段
     * SQL:SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")
     * mongo命令:
     * db.inventory.find( {
     *      status: "A",
     *      $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
     * } )
     */
    private void findAndWithOr(MongoCollection<Document> collection) {
        Bson andWithOr = and(
            eq("status", "A"),
            or(lt("qty", 30), regex("item", "^p"))
        );

        FindIterable<Document> findIterable = collection.find(andWithOr);
        for (Document document : findIterable) {
            System.out.println(document);
        }
    }

    /**
     * 修改一个文档 把item为paper的文档的 uom属性更改为cm,status更改为 P
     * mongo命令:
     * db.inventory.updateOne(
     *    { item: "paper" },
     *    {
     *      $set: { "size.uom": "cm", status: "P" },
     *      $currentDate: { lastModified: true }
     *    }
     * )
     */
    private void updateOne(MongoCollection<Document> collection) {
        collection.updateOne(
            eq("item", "paper"),
            combine(
                set("size.uom", "cm"), set("status", "P"),
                currentDate("lastModified")
            )
        );
    }

    /**
     * 修改一个文档 把qty小于50的所有文档的 uom属性更改为in,status更改为 P
     * mongo命令:
     * db.inventory.updateMany(
     *    { "qty": { $lt: 50 } },
     *    {
     *      $set: { "size.uom": "in", status: "P" },
     *      $currentDate: { lastModified: true }
     *    }
     * )
     */
    private void updateMany(MongoCollection<Document> collection) {
        collection.updateMany(
            lt("qty", 50),
            combine(
                set("size.uom", "in"), set("status", "P"),
                currentDate("lastModified")
            )
        );
    }

    /**
     * 替换整个文档
     * mongo命令:
     * db.inventory.replaceOne(
     *    { item: "paper" },
     *    { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
     * )
     */
    private void replaceOne(MongoCollection<Document> collection) {
        collection.replaceOne(
            eq("item", "paper"),
            Document.parse("{ item: 'paper', instock: [ { warehouse: 'A', qty: 60 }, { warehouse: 'B', qty: 40 } ] }")
        );
    }

    /**
     * 带条件的删除
     * mongo命令: db.inventory.deleteMany({ status : "A" })
     */
    private void deleteManyBy(MongoCollection<Document> collection) {
        DeleteResult result = collection.deleteMany(eq("item", "paper"));
        System.out.println(result.getDeletedCount());
    }

    /**
     * 删除所有文档
     * mongo命令: db.inventory.deleteMany({})
     */
    private void deleteMany(MongoCollection<Document> collection) {
        DeleteResult result = collection.deleteMany(new Document());
        // 删除行数
        System.out.println(result.getDeletedCount());
    }

}

PS: BasicDBObject/Document append 和 put 的区别:功能相同,但是返回值不同,put返回value,append返回BasicDBObject本身,便于链式调用

下一篇:SpringBoot集成MongoDB Query&BasicQuery Update&BasicUpdate示例

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值