Docs 菜单
Docs 主页
/ / /
Rust 驱动程序

快速参考

在此页面上,您可以查看使用 Rust 驱动程序执行多个常见 MongoDB 任务的示例。 下表的每一行都描述了该任务,显示了执行该任务的驱动程序语法,并包含指向相关参考和 API 文档的链接。

Rust 驱动程序提供用于执行异步应用程序的异步运行时。 此外,该驱动程序支持阻塞同步运行时。 对于下表中列出的每个 MongoDB 任务,您可以查看使用异步和同步 API 的示例。

提示

如需了解异步和同步运行时相关详情,请参阅《异步和同步 API 指南》。

命令
语法
查找文档

API 文档

异步运行时

let result = collection.find_one(
doc! { "title": "Peter Pan" },
None
).await?;

同步运行时

let result = collection.find_one(
doc! { "title": "Peter Pan" },
None
)?;

异步运行时

let filter = doc! { "year": 1925 };
let mut cursor = collection.find(filter, None).await?;

同步运行时

let filter = doc! { "year": 1925 };
let mut cursor = collection.find(filter, None)?;

异步运行时

let doc = doc! {
"title": "Mistress America", "type": "movie"
};
let result = collection.insert_one(doc, None).await?;

同步运行时

let doc = doc! {
"title": "Mistress America", "type": "movie"
};
let result = collection.insert_one(doc, None)?;

异步运行时

let docs = vec![
doc! { "title": "Friends With Money", "runtime": 88 },
doc! { "title": "Please Give", "runtime": 90 },
doc! { "title": "You Hurt My Feelings", "runtime": 93 },
];
let result = collection.insert_many(docs, None).await?;

同步运行时

let docs = vec![
doc! { "title": "Friends With Money", "runtime": 88 },
doc! { "title": "Please Give", "runtime": 90 },
doc! { "title": "You Hurt My Feelings", "runtime": 93 },
];
let result = collection.insert_many(docs, None)?;

异步运行时

let filter = doc! { "title": "Burn After Reading"};
let update =
doc! {
"$set": doc!{ "num_mflix_comments": 1 }
};
let result = collection.update_one(
filter, update, None
).await?;

同步运行时

let filter = doc! { "title": "Burn After Reading"};
let update =
doc! {
"$set": doc!{ "num_mflix_comments": 1 }
};
let result = collection.update_one(
filter, update, None
)?;

异步运行时

let filter = doc! { "rated": "PASSED"};
let update =
doc! {
"$set": doc!{ "rated": "Not Rated" }
};
let result = collection.update_many(
filter, update, None
).await?;

同步运行时

let filter = doc! { "rated": "PASSED"};
let update =
doc! {
"$set": doc!{ "rated": "Not Rated" }
};
let result = collection.update_many(
filter, update, None
)?;

异步运行时

let filter = doc! { "title": "è Nous la Libertè" };
let replacement =
doc! {
"title": "À nous la liberté",
"type": "movie",
"directors": vec! [ "René Clair" ]
};
let result = collection.replace_one(
filter, replacement, None
).await?;

同步运行时

let filter = doc! { "title": "è Nous la Libertè" };
let replacement =
doc! {
"title": "À nous la liberté",
"type": "movie",
"directors": vec! [ "René Clair" ]
};
let result = collection.replace_one(
filter, replacement, None
)?;

异步运行时

let filter = doc! { "title": "Search and Destroy" };
let result = collection.delete_one(filter, None).await?;

同步运行时

let filter = doc! { "title": "Search and Destroy" };
let result = collection.delete_one(filter, None)?;

异步运行时

let filter = doc! {
"year": doc! { "$lt": 1920 }
};
let result = collection.delete_many(filter, None).await?;

同步运行时

let filter = doc! {
"year": doc! { "$lt": 1920 }
};
let result = collection.delete_many(filter, None)?;
从游标迭代访问数据

异步运行时

let mut cursor = collection.find(
doc! { "$and": vec!
[
doc! { "metacritic": doc! { "$gt": 90 } },
doc! { "directors": vec! [ "Martin Scorsese" ] }
] },
None
).await?;
while let Some(result) = cursor.try_next().await? {
println!("{}", result);
};

同步运行时

let cursor = collection.find(
doc! { "$and": vec!
[
doc! { "metacritic": doc! { "$gt": 90 } },
doc! { "directors": vec! [ "Martin Scorsese" ] }
] },
None
)?;
for result in cursor {
println!("{}", result?);
}
以数组形式访问游标中的数据

异步运行时

let cursor = collection.find(
doc! { "title": "Secrets & Lies" }, None
).await?;
let results: Vec<Document> = cursor.try_collect().await?;

同步运行时

let cursor = collection.find(
doc! { "title": "Secrets & Lies" }, None
)?;
let results: Vec<Result<Document>> = cursor.collect();

异步运行时

let filter = doc! {
"languages": vec! [ "Mandarin" ]
};
let result = collection.count_documents(filter, None).await?;

同步运行时

let filter = doc! {
"languages": vec! [ "Mandarin" ]
};
let result = collection.count_documents(filter, None)?;
列出字段的不同值

异步运行时

let field_name = "title";
let filter = doc! {
"directors": vec! [ "Sean Baker" ]
};
let results = collection.distinct(
field_name, filter, None
).await?;

同步运行时

let field_name = "title";
let filter = doc! {
"directors": vec! [ "Sean Baker" ]
};
let results = collection.distinct(
field_name, filter, None
)?;
限制检索的文档数量

异步运行时

let opts: FindOptions = FindOptions::builder()
.limit(5)
.build();
let filter = doc! { "awards.wins": 25};
let mut cursor = collection.find(filter, opts).await?;

同步运行时

let opts: FindOptions = FindOptions::builder()
.limit(5)
.build();
let filter = doc! { "awards.wins": 25};
let mut cursor = collection.find(filter, opts)?;
跳过检索到的文档

异步运行时

let opts: FindOptions = FindOptions::builder()
.skip(1)
.build();
let filter = doc! { "runtime": 100 };
let mut cursor = collection.find(filter, opts).await?;

同步运行时

let opts: FindOptions = FindOptions::builder()
.skip(1)
.build();
let filter = doc! { "runtime": 100 };
let mut cursor = collection.find(filter, opts)?;
检索文档时对文档进行排序

异步运行时

let opts: FindOptions = FindOptions::builder()
.sort(doc! { "imdb.rating": 1 })
.build();
let filter = doc! {
"directors": vec! [ "Nicole Holofcener" ]
};
let mut cursor = collection.find(filter, opts).await?;

同步运行时

let opts: FindOptions = FindOptions::builder()
.sort(doc! { "imdb.rating": 1 })
.build();
let filter = doc! {
"directors": vec! [ "Nicole Holofcener" ]
};
let mut cursor = collection.find(filter, opts)?;
检索项目文档字段时

异步运行时

let opts: FindOptions = FindOptions::builder()
.projection(doc! { "title": 1, "metacritic": 1, "_id": 0 })
.build();
let filter = doc! { "year": 2015 };
let mut cursor = collection.find(filter, opts).await?;

同步运行时

let opts: FindOptions = FindOptions::builder()
.projection(doc! { "title": 1, "metacritic": 1, "_id": 0 })
.build();
let filter = doc! { "year": 2015 };
let mut cursor = collection.find(filter, opts)?;
创建索引

异步运行时

let index: IndexModel = IndexModel::builder()
.keys(doc! { "title": 1 })
.build();
let result = collection.create_index(index, None).await?;

同步运行时

let index: IndexModel = IndexModel::builder()
.keys(doc! { "title": 1 })
.build();
let result = collection.create_index(index, None)?;
← 后续步骤