MongoDB 术语、安装及依赖
本章我们讨论 MongoDB 的术语、安装及 Rust 操作 MongoDB 的依赖。MongoDB 插入数据
本章我们将讨论 MongoDB 插入数据的方法。MongoDB 查询数据
本章将讨论 MongoDB 查询全部数据、查询单条数据以及分页显示的方法。MongoDB 修改数据
本章将讨论 MongoDB 修改已有数据、替换已有数据、修改或插入新数据的方法。MongoDB 删除记录
本章将讨论 Mongo DB 删除记录操作MongoDB 过滤
本章将讨论 MongoDB 中最常用的功能:过滤器的定义。MongoDB 聚合操作
本章将讨论 MongoDB 的两种聚合操作:单一聚合和聚合管道。
MongoDB 修改数据
- 14
- 2025-06-06 16:34:13
本章将讨论 MongoDB 修改已有数据、替换已有数据、修改或插入新数据的方法。
修改已有数据
pub async fn update(
State(state): State<ArcAppState>,
Json(frm): Json<form::UpdateNote>,
) -> Result<Json<u64>> {
let n = state
.note_collect()
.update_one(
doc! {"_id": &frm.id},
doc! {"$set": {"title": &frm.title, "content": &frm.content}},
)
.await?;
Ok(Json(n.modified_count))
}
通过 update_one()
方法可以对数据进行修改,它接收两个参数:
- 修改条件,只有满足该条件数据才会进行修改。我们使用的是指定主键
- 要修改的数据
- 通过
$set
运算符,指定要修改哪些字段 - 提供具体在字段和值
- 通过
update_one()
用于修改单条数据- 如果要修改多条数据,使用
update_many()
测试:
结果:
HTTP/1.1 200 OK
content-type: application/json
content-length: 1
connection: close
date: Fri, 06 Jun 2025 06:56:57 GMT
1
修改或插入数据
pub async fn update_or_insert(
State(state): State<ArcAppState>,
Json(frm): Json<form::UpdateNoteUpsert>,
) -> Result<Json<u64>> {
let id = match &frm.id {
Some(v) => v.to_string(),
None => xid::new().to_string(),
};
let update_doc = match &frm.id {
Some(_) => {
doc! {"title": &frm.title, "content": &frm.content}
}
None => doc! {"title": &frm.title, "content": &frm.content,"created_at":chrono::Utc::now()},
};
let n = state
.note_collect()
.update_one(doc! {"_id": &id}, doc! {"$set": update_doc})
.upsert(true)
.await?;
Ok(Json(n.modified_count))
}
测试:
## 修改或插入单条笔记【修改】
PATCH http://127.0.0.1:9527
Content-Type: application/json
{
"id":"d100i1kdrfaihab7dmjg",
"title":"note3 <UPDATED_1>",
"content":"笔记 <UPDATED_1>"
}
## 修改或插入单条笔记【插入】
PATCH http://127.0.0.1:9527
Content-Type: application/json
{
"title":"note4",
"content":"笔记4"
}
replace_one()
用于替换指定的记录。注意区分 replace
和 update
:
replace_one()
也可以设置 upsert(true)
,以便在记录不存在时进行插入。
pub async fn replace(
State(state): State<ArcAppState>,
Path(id): Path<String>,
Json(frm): Json<form::CreateNote>,
) -> Result<Json<u64>> {
let filter = doc! {"_id": &id};
let node = model::Note {
id,
content: frm.content,
title: frm.title,
created_at: chrono::Utc::now(),
};
let n = state.note_collect().replace_one(filter, node).await?;
Ok(Json(n.modified_count))
}
测试: