#rust
#Ржавчина
Вопрос:
Я использую mongodb
и у меня есть функция для увеличения поля с именем «id» на 1.
let mongo_colecction = conecction_bd::my_bd_collection("AutoCode").await?;
let filter = doc! {
"collection": "Student"
};
let update = doc! {
"$inc": { "id": 1 }
};
let option = doc! {
"upsert": true
};
let document = mongo_colecction.find_one_and_update(filter, update, option).await;
/*
Here continues the code to update
*/
Но я получаю сообщение об ошибке, и я не знаю, как я могу это исправить.
error[E0277]: the trait bound `std::option::Option<FindOneAndUpdateOptions>: From<bson::Document>` is not satisfied
--> srcincrease_code.rs:34:47
|
34 | let document = mongo_colecction.find_one_and_update(filter, update, option).await;
| ^^^^^^^^^^^^^^^^^^^ the trait `From<bson::Document>` is not implemented for `std::option::Option<FindOneAndUpdateOptions>`
|
= help: the following implementations were found:
<std::option::Option<amp;'a T> as From<amp;'a std::option::Option<T>>>
<std::option::Option<amp;'a mut T> as From<amp;'a mut std::option::Option<T>>>
<std::option::Option<T> as From<T>>
<std::option::Option<Tls> as From<TlsOptions>>
= note: required because of the requirements on the impl of `Into<std::option::Option<FindOneAndUpdateOptions>>` for `bson::Document`
Я не знаю, что может быть не так или что мне нужно реализовать.
Комментарии:
1. ваша часть «option» должна иметь тип
FindOneAndUpdateOptions
no?2. @mfirry Я так думаю, потому что это не позволяет использовать
upsert
опцию on.3. какую версию ящика mongodb вы используете?
4. @mfirry Я использую версию 1.2.0 crate mongodb
Ответ №1:
Измените объявление option(s)
, чтобы использовать builder
. Что-то в этом роде:
let options = FindOneAndUpdateOptions::builder()
.upsert(Some(true))
.build();
А затем передать его как .find_one_and_update(filter, update, Some(options))
Комментарии:
1. Рад, что помог. Примите ответ, пожалуйста.