我正在尝试保存 rust_decimal::Decimal
MongoDB 中的对象。
我的第一次尝试通常是:
// self.db is of type mongodb::sync::Database
decimal = Decimal::new(1, 20);
let order = doc! {"decimal": decimal};
self.db.collection("collection").insert_one(order, None).unwrap();
这产生了错误:the trait 'From<Decimal>' is not implemented for 'Bson'
这让我了解了 bson
箱。在其文档中我找到了关于 Decimal128
,Mongo 支持,但似乎没有一种方便的方法来从 Decimal
进行转换或String
或任何真正的东西。
如何插入 Decimal
反对该文件?
crate 版本:
mongodb 2.2.2
bson 2.3.0
rust_decimal 1.24.0
编辑:我已经尝试过 Decimal128::from_bytes(decimal.serialize())
但它在 Decimal 中将 1 变为 Decimal128 中的 4.294967296E-6167 (小/大端问题?)。
最佳答案
Decimal128
的文档明确指出:
Currently, this type can only be used to round-trip through BSON. See RUST-36 to track the progress towards a complete implementation.
所以它不能用于此目的。
相反,我建议您使用 serde。 rust_decimal
支持 serde(具有各种选项和功能标志),bson
也是如此。您可以使用 bson::ser::to_bson()
将类型序列化为 BSON或该模块中的其他功能。例如:
decimal = Decimal::new(1, 20);
let order = doc! {"decimal": to_bson(&decimal).unwrap()};
默认情况下,这会将小数序列化为字符串,但您可以对其进行自定义。请参阅 rust_decimal
的文档。
关于mongodb - 将 rust_decimal 保存到 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72644775/