运行以下代码:
type Test =
| L of int
| M of string
| N of bool
let client = new MongoClient("mongodb://localhost:27017")
let _db = client.GetDatabase("TestDB")
let collection = _db.GetCollection<Test>("TestLog")
collection.InsertOne(L 22)
我将以下内容插入到我的收藏中:
_id: ObjectID('58d054f79a91e00c8379ab82')
_t: "L"
所以看起来 Mongo 的 .NET 驱动程序不知道如何处理受歧视的联合。我在那里看到了一些库,但它们很旧,我想先检查框架中是否没有内置任何内容。我尝试的另一件事是像这样使用 Newtonsoft 的 JSON 序列化程序:
let Json = JsonConvert.SerializeObject(L 22)
let doc = BsonSerializer.Deserialize<BsonDocument>(Json)
这将所有内容都存入数据库,但它们都以字符串类型存在,而不是它们应有的类型(在本例中为 int)。
最佳答案
NamelessInteractive.FSharp序列化库非常有效地处理这个问题。它非常适合(并保留类型)有区别的联合、记录类型、嵌入在记录类型中的有区别的联合等。
关于mongodb - 是否可以向 MongoDB 写入可区分的联合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42915080/