当使用Rust Mongo driver prototype时,结构体中的日期时间字段被序列化为String
而不是ISODate
。我该如何让这些字段保存为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
。
UtcDateTime
。 - StargateurUtcDatetime
可以工作。然而,就像对于i32
、i64
或String
一样,我不必在我的结构体中使用bson::Bson::String
或bson::Bson::I32
或bson::Bson::I64
,序列化器应该透明地处理转换。添加结构字段的变体也将是可接受的解决方案。 - nnggmongodb
无法为DateTime
实现Serialize
,需要一个包装器,而且看起来bson
已经有了并且共享了它。为什么不使用它呢? - StargateurUtc
的文档进行更新时,它会写入无法反序列化的数据。 - DenisKolodin