mongodb - 是否可以向 MongoDB 写入可区分的联合?

标签 mongodb f#

运行以下代码:

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/

相关文章:

python - 使用 pymongo,如何找到所有文档,使得每个文档中的嵌入列表包含大于 X 个元素?

node.js - Mongoose 嵌套 group by 对嵌套字段进行排序

mongodb - 为什么 MongoDB 的 "$and"运算符有时会使用不同的计划而不是内联指定条件?

f# - %A格式与非公开歧视工会的奇怪行为

F# 向上舍入到特定的小数位数

java - Java保留时间的差异(以毫秒为单位)

mysql - 用于 CRM、CMS 和其他金融系统的 RDBMS 与 NoSQL

.net - F#中没有构造函数的类

f# - 在不同的泛型实例中实现相同的接口(interface)

f# - ODataService 类型提供程序的可为空整数不存在属性 'HasValue'