将数据从一个地图更新到另一个地图
Update data from one Map to another
我怎样才能做到以下几点。
假设我创建了以下文档
{
"_id": "12345",
"email": "julio@gmail.com",
"password": "julio123",
"created": "2021-08-17",
"status": "0"
}
现在通过创建的文档,我希望有一个像下面这样的新文档。
{
"email": "julio@gmail.com",
"password": "julio123",
"status": "1"
}
我不知道我做的是否正确,但我知道缺少更多代码。
#[cfg(test)]
mod tests {
use serde_json::{Map, json};
#[test]
fn prueba() {
let mut user = Map::new();
user.insert("id".to_string(), json!("12345"));
user.insert("email".to_string(), json!("juan@gmail.com"));
user.insert("password".to_string(), json!("juan123"));
user.insert("created".to_string(), json!("2021-08-17"));
user.insert("status".to_string(), json!("0"));
println!("user: {:#?}", user);
let user2 = user.into_iter().fold(Map::new(), |mut user_map, (key, val)| {
user_map.insert(key.clone(), val.clone());
user_map
});
println!("user2: {:#?}", user2);
}
}
我刚刚开始学习使用函数式编程,我需要帮助才能获得最好的结果。
您似乎想要实现的是过滤和更新一些字段,从而创建一个新对象。
以下是您可以这样做的方法:
let user2 = user
.into_iter()
.filter_map(|(k, v)| match k.as_str() {
"email" => Some((k, v)),
"password" => Some((k, v)),
"status" => Some((k, json!("1"))),
_ => None,
})
.collect::<Map<_, _>>();
我怎样才能做到以下几点。
假设我创建了以下文档
{
"_id": "12345",
"email": "julio@gmail.com",
"password": "julio123",
"created": "2021-08-17",
"status": "0"
}
现在通过创建的文档,我希望有一个像下面这样的新文档。
{
"email": "julio@gmail.com",
"password": "julio123",
"status": "1"
}
我不知道我做的是否正确,但我知道缺少更多代码。
#[cfg(test)]
mod tests {
use serde_json::{Map, json};
#[test]
fn prueba() {
let mut user = Map::new();
user.insert("id".to_string(), json!("12345"));
user.insert("email".to_string(), json!("juan@gmail.com"));
user.insert("password".to_string(), json!("juan123"));
user.insert("created".to_string(), json!("2021-08-17"));
user.insert("status".to_string(), json!("0"));
println!("user: {:#?}", user);
let user2 = user.into_iter().fold(Map::new(), |mut user_map, (key, val)| {
user_map.insert(key.clone(), val.clone());
user_map
});
println!("user2: {:#?}", user2);
}
}
我刚刚开始学习使用函数式编程,我需要帮助才能获得最好的结果。
您似乎想要实现的是过滤和更新一些字段,从而创建一个新对象。
以下是您可以这样做的方法:
let user2 = user
.into_iter()
.filter_map(|(k, v)| match k.as_str() {
"email" => Some((k, v)),
"password" => Some((k, v)),
"status" => Some((k, json!("1"))),
_ => None,
})
.collect::<Map<_, _>>();