f#使用记录

时间:2017-11-16 18:53:07

标签: mongodb f#

我一直试图在仅使用记录但没有成功的情况下插入MongoDB。

我的问题是我想创建一个简单的插入函数,我发送一个泛型类型并将其插入到数据库中。

喜欢这样。

let insert (value: 'a) = 
    let collection = MongoClient().GetDatabase("db").GetCollection<'a> "col"
    collection.InsertOne value

通过此功能,我尝试插入以下记录。

// Error that it can't set the Id
type t1 = {
    Id: ObjectId
    Text: string
}
// Creates the record perfectly but doesn't generate a new Id
type t2 = {
    Id: string
    Text: string
}
// Creates the record and autogenerates the Id but doesn't insert the Text, and there are two Ids (_id, Id@) 
type t3 = {
    mutable Id: ObjectId
    Text: string
}
// Creates the record and autogenerates the Id but for every property it generates two on MongoDB (_id, Id@, Text, Text@)
type t4 = {
    mutable Id: ObjectId
    mutable Text: string
}

所以有人可以为此考虑解决方案,或者我不得不使用课程。

// Works!!!
type t5() = 
    member val Id = ObjectId.Empty with get, set
    member val Name = ""  with get, set

另外,有没有人知道为什么当C#MongoDB库翻译了mutable时,他最后获得了@的属性? 我可以将所有属性设置为可变,但这不是我的第一选择,因为他在数据库上创建多个属性非常糟糕。

1 个答案:

答案 0 :(得分:3)

您可以尝试使用CLIMutable(并且没有mutable字段)对您的记录进行注释。

@最终在数据库中,因为MongoDB使用反射和F#实现mutable支持字段fieldName@