当前位置: 首页 > article >正文

MongoDB增删改查,复杂查询案例分析

以下是使用 Java 对 MongoDB 进行增删改查操作以及复杂查询案例分析:

一、添加依赖

在 Maven 项目中添加 MongoDB Java 驱动依赖:

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.10.1</version>
</dependency>

二、连接 MongoDB 数据库

import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;

public class MongoApp {
    public static void main(String[] args) {
        // 创建 MongoDB 客户端连接
        MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
        // 获取数据库
        MongoDatabase database = mongoClient.getDatabase("yourDatabaseName");
    }
}

三、插入数据(Insert)

  1. 插入单个文档:
    import org.bson.Document;
    
    public class MongoApp {
        public static void main(String[] args) {
            // 创建 MongoDB 客户端连接和获取数据库(如上述代码)
            // 插入单个文档
            Document userDoc = new Document("name", "Tom")
                   .append("age", 28)
                   .append("email", "tom@example.com");
            database.getCollection("users").insertOne(userDoc);
        }
    }
  2. 插入多个文档:
    import org.bson.Document;
    import java.util.ArrayList;
    import java.util.List;
    
    public class MongoApp {
        public static void main(String[] args) {
            // 创建 MongoDB 客户端连接和获取数据库(如上述代码)
            // 插入多个文档
            Document user1 = new Document("name", "Jerry")
                   .append("age", 25)
                   .append("email", "jerry@example.com");
            Document user2 = new Document("name", "Lucy")
                   .append("age", 32)
                   .append("email", "lucy@example.com");
            List<Document> userList = new ArrayList<>();
            userList.add(user1);
            userList.add(user2);
            database.getCollection("users").insertMany(userList);
        }
    }

四、删除数据(Delete)

  1. 删除单个文档:
    import org.bson.Document;
    
    public class MongoApp {
        public static void main(String[] args) {
            // 创建 MongoDB 客户端连接和获取数据库(如上述代码)
            // 删除单个文档
            database.getCollection("users").deleteOne(new Document("name", "Tom"));
        }
    }
  1. 删除多个文档:
    import org.bson.Document;
    
    public class MongoApp {
        public static void main(String[] args) {
            // 创建 MongoDB 客户端连接和获取数据库(如上述代码)
            // 删除多个文档
            database.getCollection("users").deleteMany(new Document("age", { $gt: 30 }));
        }
    }

五、更新数据(Update)

  1. 更新单个文档的部分字段:
    import org.bson.Document;
    
    public class MongoApp {
        public static void main(String[] args) {
            // 创建 MongoDB 客户端连接和获取数据库(如上述代码)
            // 更新单个文档的部分字段
            database.getCollection("users").updateOne(new Document("name", "Jerry"),
                    new Document("$set", new Document("age", 26)));
        }
    }
  2. 更新多个文档的部分字段:
    import org.bson.Document;
    
    public class MongoApp {
        public static void main(String[] args) {
            // 创建 MongoDB 客户端连接和获取数据库(如上述代码)
            // 更新多个文档的部分字段
            database.getCollection("users").updateMany(new Document(),
                    new Document("$set", new Document("email", new Document("$replaceAll", new Document("input", "$email").append("find", "@example.com").append("replace", "@newdomain.com")))));
        }
    }

六、查询数据(Find)

  1. 基本查询:
    import org.bson.Document;
    import com.mongodb.client.FindIterable;
    import com.mongodb.client.MongoCursor;
    
    public class MongoApp {
        public static void main(String[] args) {
            // 创建 MongoDB 客户端连接和获取数据库(如上述代码)
            // 基本查询
            FindIterable<Document> allUsers = database.getCollection("users").find();
            MongoCursor<Document> cursor = allUsers.iterator();
            while (cursor.hasNext()) {
                System.out.println(cursor.next());
            }
        }
    }
  2. 投影查询(只返回指定字段):
    import org.bson.Document;
    import com.mongodb.client.FindIterable;
    import com.mongodb.client.MongoCursor;
    
    public class MongoApp {
        public static void main(String[] args) {
            // 创建 MongoDB 客户端连接和获取数据库(如上述代码)
            // 投影查询
            FindIterable<Document> userNamesAndAges = database.getCollection("users").find(new Document(), new Document("name", 1).append("age", 1));
            MongoCursor<Document> cursor = userNamesAndAges.iterator();
            while (cursor.hasNext()) {
                System.out.println(cursor.next());
            }
        }
    }

七、复杂查询案例分析

  1. 多条件查询:假设我们有一个商品集合products,文档包含namecategorypricestock等字段。我们要查询特定类别(如 “电子产品”)且价格在某个区间(如 100 到 500)并且有库存的商品。
    import org.bson.Document;
    import com.mongodb.client.FindIterable;
    import com.mongodb.client.MongoCursor;
    
    public class MongoApp {
        public static void main(String[] args) {
            // 创建 MongoDB 客户端连接和获取数据库(如上述代码)
            // 多条件查询
            FindIterable<Document> productsQuery = database.getCollection("products").find(new Document("category", "电子产品").append("price", new Document("$gte", 100).append("$lte", 500).append("stock", new Document("$gt", 0)));
            MongoCursor<Document> cursor = productsQuery.iterator();
            while (cursor.hasNext()) {
                System.out.println(cursor.next());
            }
        }
    }
  2. 排序和分页查询:假设我们要查询商品集合,按照价格降序排列,每页显示 10 个商品,获取第二页的内容。
    import org.bson.Document;
    import com.mongodb.client.FindIterable;
    import com.mongodb.client.MongoCursor;
    import com.mongodb.client.model.Sorts;
    import com.mongodb.client.model.SkipLimit;
    
    public class MongoApp {
        public static void main(String[] args) {
            // 创建 MongoDB 客户端连接和获取数据库(如上述代码)
            // 排序和分页查询
            FindIterable<Document> sortedAndPaginatedProducts = database.getCollection("products").find().sort(Sorts.descending("price")).skip(10).limit(10);
            MongoCursor<Document> cursor = sortedAndPaginatedProducts.iterator();
            while (cursor.hasNext()) {
                System.out.println(cursor.next());
            }
        }
    }
  3. 聚合查询(复杂数据分析):假设我们想统计每个类别下的商品数量以及平均价格。
    import org.bson.Document;
    import com.mongodb.client.MongoCollection;
    import com.mongodb.client.MongoDatabase;
    import com.mongodb.client.AggregateIterable;
    import com.mongodb.client.MongoCursor;
    
    public class MongoApp {
        public static void main(String[] args) {
            // 创建 MongoDB 客户端连接和获取数据库(如上述代码)
            // 聚合查询
            MongoCollection<Document> collection = database.getCollection("products");
            AggregateIterable<Document> categoryStats = collection.aggregate(
                    java.util.Arrays.asList(
                            new Document("$group", new Document("_id", "$category").append("count", new Document("$sum", 1)).append("averagePrice", new Document("$avg", "$price")))
            );
            MongoCursor<Document> cursor = categoryStats.iterator();
            while (cursor.hasNext()) {
                System.out.println(cursor.next());
            }
        }
    }


http://www.kler.cn/a/391610.html

相关文章:

  • 11张思维导图带你快速学习java
  • 《深度解析 C++中的弱引用(weak reference):打破循环依赖的利器》
  • 基于Python+Django+Vue3+MySQL实现的前后端分类的商场车辆管理系统
  • 除了 Postman,还有什么好用的 API 调试工具吗
  • 鸿蒙进阶篇-属性动画-animateTo转场动画
  • 推荐一款好用的postman替代工具2024
  • 精准监测,高效防护:特力康输电线路防山火新方案
  • Vue2+ElementUI:用计算属性实现搜索框功能
  • Python网络爬虫简介
  • 信令服务器设计之websocket
  • Spring Boot基础教学:Spring Boot 简介
  • 元器件封装
  • Linux系统编程学习 NO.11——进程的概念(2)
  • IntelliJ+SpringBoot项目实战(四)--快速上手数据库开发
  • php中ajax怎么使用【小白专用24.11.12】
  • git怎么切换分支
  • 安装双系统(linux操作系统(debian)安装)
  • Kafka新节点加入集群操作指南
  • 前端性能优化2
  • Redis主从复制(replication)
  • SpringBoot(十七)创建多模块Springboot项目
  • Redis中的持久化
  • C# Properties保存参数
  • LeetCode:103. 二叉树的锯齿形层序遍历
  • 2024-11-13 Unity Addressables1——概述与导入
  • Flink Source 详解