MongoDB使用Linq表达式推送到嵌套数组

时间:2019-01-17 11:51:19

标签: c# mongodb linq mongodb-.net-driver

要使用de MongoDB C#驱动程序执行推送,我需要实例化一个FieldDefinition<MyMongoDocumentType, MyNestedArrayType[]>

我知道我可以使用字符串实例化此FieldDefinition ...

FieldDefinition<MyMongoDocumentType, NestedArrType[]> field = "MyArray.$.MyNestedArray";

我使用Linq表达式尝试了相同的操作,

FieldDefinition<MyMongoDocumentType, NestedArrType[]> field =
    new ExpressionFieldDefinition<MyMongoDocumentType, NestedArrType[]>(
        doc => doc.MyArray.First().MyNestedArray
    );

但是我得到了这个错误:

  

System.InvalidOperationException:无法确定   doc的序列化信息=>   doc.MyArray.First()。MyNestedArray。

有什么方法可以使用有效的Linq表达式来创建嵌套数组的FieldDefinition吗?

1 个答案:

答案 0 :(得分:1)

您可以将-1用作表示位置运算符($)的数组索引:

FieldDefinition<MyMongoDocumentType, NestedArrType[]> field =
            new ExpressionFieldDefinition<MyMongoDocumentType, NestedArrType[]>(
                doc => doc.MyArray[-1].MyNestedArray
            );

要使其正常工作,您还需要在MyArray上附加查询条件,例如,可以使用MongoDB .NET驱动程序中的ElemMatch来完成此查询。

Builders<MyMongoDocumentType>.Filter.ElemMatch(x => x.MyArray, f => f.NestedId == 1);