MongoDB 术语、安装及依赖
本章我们讨论 MongoDB 的术语、安装及 Rust 操作 MongoDB 的依赖。MongoDB 插入数据
本章我们将讨论 MongoDB 插入数据的方法。MongoDB 查询数据
本章将讨论 MongoDB 查询全部数据、查询单条数据以及分页显示的方法。MongoDB 修改数据
本章将讨论 MongoDB 修改已有数据、替换已有数据、修改或插入新数据的方法。MongoDB 删除记录
本章将讨论 Mongo DB 删除记录操作MongoDB 过滤
本章将讨论 MongoDB 中最常用的功能:过滤器的定义。MongoDB 聚合操作
本章将讨论 MongoDB 的两种聚合操作:单一聚合和聚合管道。
MongoDB 修改数据
- 596
- 2025-06-06 16:34:13
修改已有数据
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() 方法可以对数据进行修改,它接收两个参数:
测试:
## 修改单条笔记
PUT http://127.0.0.1:9527
Content-Type: application/json
{
"id":"d100i1kdrfaihab7dmjg",
"title":"note3 <UPDATED>",
"content":"笔记 <UPDATED>"
}
给 update_one() 或 update_many() 设置 upsert(true),可以在记录不存在时进行插入操作:
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用于将记录完整地替换,只保留主键不变。它是【整体修改】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))
}
测试:
## 替换笔记
PUT http://127.0.0.1:9527/d100i1kdrfaihab7dmjg
Content-Type: application/json
{
"title":"note3 <REPLACED>",
"content":"笔记 <REPLACED>"
}
