Принудительно заставить драйвер C # MongoDB генерировать «$ elemMatch» в точечной нотации - PullRequest
0 голосов
/ 10 декабря 2018

Драйвер C # MongoDB преобразует запросы базовых массивов в «точечную нотацию», но, к сожалению, CosmosDB не поддерживает этот синтаксис по умолчанию .

В настоящее время я работаю над этой проблемойдобавив дополнительное (бессмысленное) условие к моему запросу, что заставляет использовать $elemMatch, но я бы предпочел сделать это на уровне конфигурации, если это возможно.

Например.

collection.Find(c => c.Items.Any(i => i.Status == 1));

Сгенерирует запрос:

{"Items.Status": 1}

Но я хочу, чтобы он сгенерировал:

{"Items": { "$elemMatch": { "Status": 1 } } }

1 Ответ

0 голосов
/ 10 декабря 2018

Вы можете использовать общий тип Builders из драйвера MongoDB .NET для явного построения запроса $ elemMatch с использованием класса вашей модели, попробуйте:

var filter = Builders<YourModel>.Filter.ElemMatch(x => x.Items, item => item.Status == 1);
collection.Find(filter).ToList();
...