У меня есть коллекция в Azure CosmosDB, и каждый документ выглядит так:
{
"id": "random",
"TeacherName": "Ben",
"Students": [
{
"Name": "John",
"Telephone": ""
},
{
"Name": "Mary",
"Telephone": ""
}
],
}
TeacherName - строка, студенты - это список учеников.
Мне нужно сделать: учитывая имя пользователя (user1), запросить и вернуть все документы, либо имя учителя «user1», либо есть ученик с именем «user1».
Я пробовал несколько вариантов, но не могу.
Ближайшее решение, которое я нашел до сих пор, - использовать .SelectMany()
, но я обнаружил, что .SelectMany
выполнит соединение и будет дублировать возвращаемые результаты.
Это мой запрос:
client.CreateDocumentQuery().SelectMany((x) => x.Students.Where(s=>s.Name == "user1" || x.TeacherName == "user1")
Если в коллекции есть только приведенный выше образец документа и когда я искал имя пользователя «Бен», будут возвращены 2 записи ((количество результатов) * (количество студентов)). Мне нужно удалить дубликат на стороне клиента, и разбивка на страницы не работает.
Можно ли выполнить один запрос, чтобы достичь того, что мне нужно?