将数据从一个地图更新到另一个地图

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<_, _>>();