Rust применить upsert при обновлении

#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. Рад, что помог. Примите ответ, пожалуйста.