MongoDB передает вложенный массив с помощью выражений Linq - PullRequest
0 голосов
/ 17 января 2019

Чтобы выполнить push с использованием драйвера 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.

Есть ли способ создать FieldDefinition вложенного массива, используя работающее выражение Linq?

1 Ответ

0 голосов
/ 18 января 2019

Вы можете использовать -1 в качестве индекса массива для представления позиционного оператора ($):

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

Чтобы это работало, вам также нужно дополнительное условие запроса на MyArray, которое можно выполнить с помощью ElemMatch в драйвере MongoDB .NET, например:

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