Mongodb 如何将元素添加到嵌套数组中

Mongodb 如何将元素添加到嵌套数组中,mongodb,f#,Mongodb,F#,当我尝试向如下列表中添加项目时: 打开MongoDB.Driver 类型SegmentId=string 类型段RM= {id:SegmentId 用户:字符串列表} let addUserToSegment(集合:IMongoCollection)(id:SegmentId)(usr:string)= 让filter=Builders.filter.Eq((funx->x.id),id) 让update=Builders.update.Push((funx->x.users),usr) col

当我尝试向如下列表中添加项目时:

打开MongoDB.Driver
类型SegmentId=string
类型段RM=
{id:SegmentId
用户:字符串列表}
let addUserToSegment(集合:IMongoCollection)(id:SegmentId)(usr:string)=
让filter=Builders.filter.Eq((funx->x.id),id)
让update=Builders.update.Push((funx->x.users),usr)
collection.UpdateOneAsync(过滤器,更新)
我有一个编译错误
没有与方法“Push”匹配的重载。可用的重载如下所示。
还尝试了
users:string[]
,但出现了相同的错误。
有人知道如何避免此编译错误吗?

编译器错误表明
字符串列表
IEnumerable
不兼容。但是
string-seq
是这样的,所以您应该如下定义您的类型

type SegmentRM =
    { id : SegmentId      
      users: string seq }

编译器错误表明
字符串列表
IEnumerable
不兼容。但是
string-seq
是这样的,所以您应该如下定义您的类型

type SegmentRM =
    { id : SegmentId      
      users: string seq }
假设调用此方法,则必须显式地将列表强制转换或转换为序列,可以直接执行,也可以通过调用执行以下操作:

[<CompiledName("OfList")>]
let ofList (source : 'T list) =
    (source :> seq<'T>)
解释

原因是
Push
需要一个返回
IEnumerable
的函数。其语法是:

static member Push : 
    memberExpression : Expression<Func<'TDocument, IEnumerable<'TValue>>> * 
    value : 'TValue -> UpdateBuilder<'TDocument> 
Seq.ofList
用户
列表强制转换为
推送
所期望的
IEnumerable
如果调用此方法,则必须直接或通过调用显式强制转换列表或将其转换为序列,该调用只执行以下操作:

[<CompiledName("OfList")>]
let ofList (source : 'T list) =
    (source :> seq<'T>)
解释

原因是
Push
需要一个返回
IEnumerable
的函数。其语法是:

static member Push : 
    memberExpression : Expression<Func<'TDocument, IEnumerable<'TValue>>> * 
    value : 'TValue -> UpdateBuilder<'TDocument> 

Seq.of列表
用户
列表转换为
推送
期望的
IEnumerable
也许您可以编辑您的问题以包含重载列表?这可能会有帮助。也许您可以编辑您的问题以包含重载列表?这可能会有帮助。列表确实实现了
IEnumerable
,因此与这些接口兼容。但在这种情况下使用它们需要显式转换。没有理由改变存储类型,我很难找到F#list模块与.NET list连接的任何地方,而不是。我说过它实现了
IEnumerable
,这就是为什么
list
的Seq.起作用的原因。它所做的一切都是向上转换到
IEnumerable
至于文档,请检查,而不是列表模块列表确实实现了
IEnumerable
,因此与这些接口兼容。但在这种情况下使用它们需要显式转换。没有理由改变存储类型,我很难找到F#list模块与.NET list连接的任何地方,而不是。我说过它实现了
IEnumerable
,这就是为什么
list
的Seq.起作用的原因。它所做的只是向上转换到
IEnumerable
至于文档,请选中,而不是列表模块