mongodb - 使用 Rust Mongo 驱动程序原型(prototype)时,如何将 chrono::DateTime 字段序列化为 ISODate?

标签 mongodb rust bson serde

结构中的日期时间字段被序列化为 String s 而不是 ISODate s 使用 Rust Mongo driver prototype 时.如何将字段保存为 ISODate ?

use chrono::{DateTime, Utc};
use mongodb::oid::ObjectId;
use mongodb::{
    coll::Collection, db::Database, db::ThreadedDatabase, error::Error, Client, ThreadedClient,
};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Clone, Debug)]
struct Person {
    pub _id: ObjectId,
    pub date: DateTime<Utc>,
}

fn main() {
    let client = Client.with_uri("mongodb://localhost:27017").unwrap();
    let p = Person {
        _id: ObjectId::new().unwrap(),
        date: Utc::now(),
    };
    let document = mongodb::to_bson(p).unwrap().as_document();
    if document.is_some() {
        client
            .db("my_db")
            .collection("mycollection")
            .insert_one(document, None)
            .unwrap();
    }
}

在查询数据库时,记录包含一个日期字符串(ISO 格式);我希望它是 ISODate .

最佳答案

您可以使用 serde_helpers 选择反序列化作为 ISO 字符串。
https://docs.rs/bson/1.2.2/bson/serde_helpers/index.html

use mongodb::bson::DateTime;
use mongodb::bson::serde_helpers::bson_datetime_as_iso_string;

#[derive(Serialize, Deserialize, Clone, Debug)]
struct Person {
    pub _id: ObjectId,
    #[serde(with = "bson_datetime_as_iso_string")]
    date: DateTime,
}

关于mongodb - 使用 Rust Mongo 驱动程序原型(prototype)时,如何将 chrono::DateTime 字段序列化为 ISODate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55735974/

相关文章:

node.js - 在 mongo db 中插入批量数据时,出现错误 : "mongo/util/concurrency/rwlock.h:204"

C#。将对象列表保存到 Mongo 的最快方法

rust - 解决通过引用获取参数的闭包的类型不匹配

mongodb - 在 Mongodb 中获取多个值的不同值

node.js - 在嵌套数组中查找和删除文档

mongodb - 子文档的 Mongo 更新

rust - 函数调用中的生命周期参数有冲突的要求

rust - 当我无法更改打印的代码时,如何捕获 stdout/stderr 的内容?

mongodb - 如何在解码 MongoDB 文档时忽略空值?

unity-game-engine - unity Json.net bson 自引用循环