要使用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
吗?
答案 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);