I am implementing a process in rust where I read a large number of documents from a mongodb collection, perform some calculations on the values of each document and then have to update the documents in mongodb.
In my initial implementation, after the calculations are performed, I go through each of the documents and call db.collection.replace_one
.
let document = bson::to_document(&item).unwrap();
let filter = doc! { "_id": item.id.as_ref().unwrap() };
let result = my_collection.replace_one(filter, rec_document, None).await?
Since this is quite time consuming for large record sets, I want to implement it using db.collection.bulkWrite
. In version 1.1.1 of the official rust mongodb driver, bulkWrite
does not seem to be supported, so I want to use db.run_command
. However, I am not sure how to call db.collection.bulkWrite(...)
using run_command
as I cannot figure out how to pass the command name as well as the set of documents to replace the values in mongodb.
What I have attempted is to create a String
representing the command document with all the document records to be updated string joined as well. In order to create bson::Document
from that string, I convert the string to bytes and then attempt to create the document to be passed using Document::from_reader
but that doesn't work, nor is a good solution.
Is there a proper or better way to call bulkWrite
using version 1.1.1 of the mongodb crate?