我想使用HashMap<u64, usize>
对bson::to_bson()
进行编码,以便将其存储在MongoDB中。
当我运行代码时,它惊慌失措并告诉我InvalidMapKeyType(FloatingPoint(....))
。我不能用这种方法来编码这种类型的HashMap吗?
答案 0 :(得分:1)
BSON library disallows all keys that are not strings。 BSON spec表示文档是元素序列,每个元素必须以名称开头,名称只能是字符串。
更改HashMap
以使用字符串作为键可以解决问题。
你的问题对我没有任何意义。您声明自己拥有HashMap<u64, usize>
,但由于FloatingPoint
,您的错误代码段表明它已出现!
这就是为什么你应该总是创建一个MCVE然后在提问时提供它。我创建了这个样本,完全按照你的说法完成,我得到了一个不同的错误:
extern crate bson; // 0.8.0
use std::collections::HashMap;
fn main() {
let mut thing = HashMap::new();
thing.insert(0_u64, 1_usize);
match bson::to_bson(&thing) {
Ok(e) => println!("{:?}", e),
Err(e) => println!("Got an error: {:?}, {}", e, e),
}
}
Got an error: UnsupportedUnsignedType, BSON does not support unsigned type
如果我将HashMap
更改为已签名的数字,那么我会得到同一类错误:
thing.insert(0_i64, 1_isize);
Got an error: InvalidMapKeyType(I64(0)), Invalid map key type: I64(0)
你甚至不能使用HashMap
作为Rust中的密钥来f64
,因为它没有实现Hash
或Eq
,所以我不知道你是如何得到这个特定错误的。