mongodb语法以及springboot中操作mongodb数据库(query update Criteria的使用)

2023-09-14 10:29:27

mongodb语法

  1. 创建数据库:use DATABASE_NAME

  2. 创建集合:db.createCollection("COLLECTION_NAME")

  3. 插入数据:db.COLLECTION_NAME.insert({key:value})

  4. 查询数据:db.COLLECTION_NAME.find()

  5. 更新数据:db.COLLECTION_NAME.update({query}, {update}, {upsert}, {multi})

  6. 删除数据:db.COLLECTION_NAME.remove({query}, {justOne})

  7. 条件查询:db.COLLECTION_NAME.find({key:value})

  8. 范围查询:db.COLLECTION_NAME.find({key:{$gt:value1,$lt:value2}})

  9. 排序:db.COLLECTION_NAME.find().sort({key:1})(按升序排列)或db.COLLECTION_NAME.find().sort({key:-1})(按降序排列)

  10. 分页查询:db.COLLECTION_NAME.find().skip(NUMBER_OF_DOCUMENTS_TO_SKIP).limit(NUMBER_OF_DOCUMENTS_TO_SHOW)

  11. 聚合查询:db.COLLECTION_NAME.aggregate([{stage1},{stage2},...])

  12. 建立索引:db.COLLECTION_NAME.createIndex({key:1})(按升序建立索引)或db.COLLECTION_NAME.createIndex({key:-1})(按降序建立索引)

  13. 删除索引:db.COLLECTION_NAME.dropIndex({key:1})

  14. 退出MongoDB:quit()exit() 

springboot使用

引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
 
使用 mongoTemplate 进行 MongoDB 增删改查的例子:

首先创建一个实体类 User:
@Document(collection = "users")
public class User {
    @Id
    private String id;
    private String name;
    private Integer age;
    // getters and setters
}
使用 @Document 注解标记该实体类对应到 MongoDB 的 users 集合中,并使用 @Id 注解标识 id 字段为主键。

创建一个 UserDao 类,用来进行 MongoDB 的增删改查操作:
@Repository
public class UserDao {
    @Autowired
    private MongoTemplate mongoTemplate;
    
    public User addUser(User user) {
        mongoTemplate.save(user);
        return user;
    }
    
    public void updateUser(User user) {
        Query query = new Query(Criteria.where("id").is(user.getId()));
        Update update = new Update().set("name", user.getName())
                                    .set("age", user.getAge());
        mongoTemplate.updateFirst(query, update, User.class);
    }
    
    public User findUserById(String id) {
        Query query = new Query(Criteria.where("id").is(id));
        return mongoTemplate.findOne(query, User.class);
    }
    
    public List<User> findUsersByName(String name) {
        Query query = new Query(Criteria.where("name").is(name));
        return mongoTemplate.find(query, User.class);
    }
 
    public void deleteUserById(String id) {
        Query query = new Query(Criteria.where("id").is(id));
        mongoTemplate.remove(query, User.class);
    }}

使用 @Repository 注解将 UserDao 交给 Spring 管理,并注入 mongoTemplate 对象。

addUser 方法用来添加用户,使用 mongoTemplate.save 方法保存对象到 MongoDB 中。

updateUser 方法用来修改用户信息,使用 mongoTemplate.updateFirst 方法进行更新操作。Query 类表示查询条件,Criteria 类表示查询条件的集合,Update 类表示更新操作的集合。

findUserById 方法用来根据用户 ID 查询用户信息,使用 mongoTemplate.findOne 方法查询单个对象。

findUsersByName 方法用来根据用户名查询符合条件的用户列表,使用 mongoTemplate.find 方法查询对象列表。

deleteUserById 方法用来根据用户 ID 删除用户信息,使用 mongoTemplate.remove 方法删除对象。

最后创建一个 UserController 类,用来测试 MongoDB 的增删改查操作:
@RestController
public class UserController {
    @Autowired
    private UserDao userDao;
    
    @PostMapping("/user")
    public User addUser(@RequestBody User user) {
        return userDao.addUser(user);
    }
    
    @PutMapping("/user")
    public void updateUser(@RequestBody User user) {
        userDao.updateUser(user);
    }
    
    @GetMapping("/user/{id}")
    public User findUserById(@PathVariable("id") String id) {
        return userDao.findUserById(id);
    }
    
    @GetMapping("/users/{name}")
    public List<User> findUsersByName(@PathVariable("name") String name) {
        return userDao.findUsersByName(name);
    }
 
    @DeleteMapping("/user/{id}")
    public void deleteUserById(@PathVariable("id") String id) {
        userDao.deleteUserById(id);
    }
}

使用 @RestController 注解将 UserController 交给 Spring 管理,并注入 UserDao 对象。

addUser 方法用来添加用户信息,使用 @PostMapping 注解标记 HTTP POST 请求。

updateUser 方法用来修改用户信息,使用 @PutMapping 注解标记 HTTP PUT 请求。

findUserById 方法用来根据用户 ID 查询用户信息,使用 @GetMapping 注解标记 HTTP GET 请求。

findUsersByName 方法用来根据用户名查询符合条件的用户列表,使用 @GetMapping 注解标记 HTTP GET 请求。

deleteUserById 方法用来根据用户 ID 删除用户信息,使用 @DeleteMapping 注解标记 HTTP DELETE 请求。

以上就是使用 mongoTemplate 进行 MongoDB 增删改查的例子。

Query Update Criteria的用法
Query、Update 和 Criteria 是 Spring Data MongoDB 中的三个重要概念,它们用于进行 MongoDB 的复杂查询和更新操作。下面分别介绍它们的用法:

Query中的方法
addCriteria(Criteria criteria)
添加查询条件。可以使用 Criteria 对象来构建复杂的查询条件。

with(Sort sort)
设置排序规则。可以使用 Sort 对象来构建复杂的排序规则。

with(Pageable pageable)
设置分页规则。可以使用 PageRequest 对象来构建分页规则。

fields()
设置查询的字段。可以使用 Fields 对象来指定需要返回的字段。如果不调用 fields() 方法,则返回所有字段。

include(String... fields)
设置需要返回的字段。同 fields() 方法。

exclude(String... fields)
设置不需要返回的字段。同 fields() 方法。

limit(int limit)
设置查询结果的最大数量。

skip(int skip)
设置查询结果的偏移量。

count()
返回查询结果的数量。

one()
返回查询结果的第一条记录。

list()
返回查询结果的所有记录。

exists()
判断查询结果是否存在。

aggregate(Aggregation aggregation, Class<T> resultType)
执行聚合操作。可以使用 Aggregation 对象来构建聚合操作。resultType 指定返回的结果类型。

query的使用
Query 使用 Criteria 对象来构建查询条件,并可以设置排序、分页等参数。例如:

Query query = new Query(Criteria.where("name").is("Tom").and("age").gte(20));
query.with(Sort.by(Sort.Direction.DESC, "age"));
query.skip(0).limit(10);
上面的代码表示查询名字为 "Tom" 且年龄大于等于 20 的用户,并按照年龄降序排序,返回第 1 到 10 条结果。

Query 还支持链式调用:

Query query = new Query()
    .addCriteria(Criteria.where("name").is("Tom").and("age").gte(20))
    .with(Sort.by(Sort.Direction.DESC, "age"))
    .skip(0).limit(10);

Update中的方法
set(String key, Object value)
设置字段的值。

unset(String key)
删除字段。

inc(String key, Number value)
增加数值类型字段的值。

push(String key, Object value)
将元素添加到数组字段中。

addToSet(String key, Object value)
将元素添加到集合字段中。

pop(String key, Position position)
从数组字段中删除元素。

pull(String key, Object value)
从数组或集合字段中删除元素。

pullAll(String key, Object[] values)
从数组或集合字段中删除多个元素。

rename(String oldName, String newName)
重命名字段。

currentDate(String key)
设置字段的值为当前日期。

max(String key, Number value)
如果字段的值小于指定值,则更新字段的值。

min(String key, Number value)
如果字段的值大于指定值,则更新字段的值。

mul(String key, Number value)
将数值类型字段的值乘以指定值。

addToSetEach(String key, Object... values)
将多个元素添加到集合字段中。

pushEach(String key, Object... values)
将多个元素添加到数组字段中。

bitwise(String key, Bitwise bitwise, int value)
执行位运算。

以上就是 Query 和 Update 中常用的方法,借助这些方法,可以构建出复杂的查询和更新操作。

update的使用
Update 用于构建更新操作,可以设置更新的字段和条件。例如:

Update update = new Update().set("name", "Jim").inc("age", 1);
上面的代码表示将名字为 "Jim" 的用户的年龄加 1。

Update 还支持链式调用:

Update update = new Update()
    .set("name", "Jim")
    .inc("age", 1);
Criteria的使用
Criteria 用于构建查询条件,支持多种操作符,例如:

Criteria criteria = Criteria.where("name").is("Tom").and("age").gte(20);

上面的代码表示查询名字为 "Tom" 且年龄大于等于 20 的用户。

Criteria 还支持链式调用:

Criteria criteria = new Criteria()
    .andOperator(
        Criteria.where("name").is("Tom"),
        Criteria.where("age").gte(20)
    );

除了 andOperator,还支持 orOperator、notOperator、norOperator 等逻辑操作符。

另外,Criteria 还支持比较操作符,例如:

Criteria.where("age").gt(18)   // 大于
Criteria.where("age").gte(18)  // 大于等于
Criteria.where("age").lt(18)   // 小于
Criteria.where("age").lte(18)  // 小于等于
Criteria.where("age").is(18)   // 等于
Criteria.where("age").ne(18)   // 不等于
Criteria.where("name").in("Tom", "Jim")  // 在集合中
Criteria.where("name").nin("Tom", "Jim") // 不在集合中
Criteria.where("name").regex("pattern") // 正则匹配
以上就是 Query、Update 和 Criteria 的用法。借助这些对象,可以进行更加灵活和高效的 MongoDB 查询和更新操作

更多推荐

使用 Verilator 进行 Verilog Lint

FPGA设计是无情的,所以我们需要利用能获得的任何软件进行检查。Verilator是一个Verilog仿真器,还支持linting:静态分析设计中的问题。Verilator不仅可以发现综合工具可能忽略的问题,而且运行速度也很快。Verilator也非常适合使用SDL进行图形仿真。安装VerilatorLinuxVeri

C++ Primer Plus 第七章笔记

目录函数基本知识没有返回值的函数:void函数有返回值的函数:函数原型1.为什么需要函数原型?2.函数原型的语法3.函数原型的功能按值传递函数参数形参和实参局部变量参数问题使用const指针参数调用自身的函数(递归)指向函数的指针1.获取函数的地址2.声明函数指针3.使用函数指针来调用函数函数基本知识要使用C++函数必

分布式协议与算法——Raft算法

目录Raft算法领导者选举有哪些成员身份?领导者选举流程选举细节节点之间如何通信什么是任期选举有哪写规则随机超时时间是什么小结日志复制如何理解日志如何复制日志如何实现日志的一致小结节点成员变更成员变更的问题如何通过单节点变更解决成员变更的问题小结Raft小结Raft算法Raft算法属于Multi-Paxos算法,它是在

2023年贵州省职业院校技能大赛高职组信息安全管理与评估竞赛试题

2023年贵州省职业院校技能大赛高职组信息安全管理与评估竞赛试题第一阶段竞赛项目试题根据信息安全管理与评估技术文件要求,第一阶段为网络平台搭建与网络安全设备配置与防护。本文件为信息安全管理与评估项目竞赛-第一阶段试题。介绍竞赛阶段任务阶段竞赛任务第一阶段平台搭建与安全设备配置防护任务1网络平台搭建任务2网络安全设备配置

【SQL】MySQL中的窗口函数(开窗函数)

窗口函数是MYSQL8.0新增的聚合函数:多行变一行,常见的sum,count,max,min窗口函数:行数不变,常见的row_number,rank语法格式:窗口函数(表达式)over(partitionby…orderby…frame_clause)partitionby是分区,类似于groupby,如去掉相当于对

MySQL数据库入门到精通1--基础篇(MySQL概述,SQL)

1.MySQL概述1.1数据库相关概念目前主流的关系型数据库管理系统:Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。目前Oracle推出了收费版本的MySQL,也提供了免费的社区版本。SQLServe

docker基础命令快速入门

docker快速入门Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。Docker的三个概念镜像Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的配置参数。镜像不包含任何动态数据,其内容

4k、VR与万兆光网

“全光万兆”对VR意义重大。pico4的分辨率PICO4的单眼分辨率是2160×2160,整体分辨率高达4320×2160。这是一款高性能的VR一体机,采用了2.56英寸的Fast-LCD屏幕,最高可实现90Hz刷新率,还有1200PPI和20.6PPD的超清晰画面表现。PICO4的视场角为105°,比上一代PICON

使用HTTP爬虫ip中的常见误区与解决方法

在使用HTTP爬虫进行网页抓取时,涉及到IP地址的处理,可能会存在一些常见的误区。以下是一些常见误区及解决方法:1.使用个人IP进行大规模爬取:如果你使用个人住宅IP进行大规模爬取,可能会被目标网站视为恶意攻击,从而导致被封禁。解决方法:使用代理IP,或者租用专门的爬虫服务器。2.忽略IP封禁:一些网站可能会封禁特定的

Android kotlin系列讲解(进阶篇)解析XML格式数据

点击查看>返回总目录<|上一篇:Androidkotlin系列讲解(入门篇)使用HTTP访问网络文章目录1、Pull解析方式2、SAX解析方式通常情况下,每个需要访问网络的应用程序都会有一个自己的服务器,我们可以向服务器提交数据,也可以从服务器上获取数据。不过这个时候就出现了一个问题,这些数据到底要以什么样的格式在网络

Kotlin 不可变数组和可变数组

在Kotlin中,可以使用数组来存储一组相同类型的元素。Kotlin提供了两种类型的数组:不可变数组和可变数组。不可变数组(ImmutableArrays)不可变数组的大小(元素数量)在创建后就确定,并且不能更改。使用arrayOf()函数或者arrayOfNulls()函数创建不可变数组。不可变数组中的元素值是固定的

热文推荐