#json #azure #.net-core #azure-cosmosdb #azure-cosmosdb-sqlapi
#json #azure #.net-core #azure-cosmosdb #azure-cosmosdb-sqlapi
Вопрос:
{
"Name": "Sam",
"Car": [
{
"Brand": "BMW",
"Category": "HunchBack",
"Type": "Gas"
},
{
"Brand": "Tesla",
"Category": "Sedan",
"Type": "Electric"
}
]
}
Я хочу, чтобы Cosmos Sqlquery запрашивал подсписок CAR по МАРКЕ, и он вернет только тот документ, который соответствует критериям.
Select * from c JOIN t IN c.Car
where t.BRAND = 'Tesla'
Я пробовал это, но это работает только частично, так как он также возвращает подсписок BMW
Но ожидаемый результат
{
"Name": "Sam",
"Car": [
{
"Brand": "Tesla",
"Category": "Sedan",
"Type": "Electric"
}
]
}
Комментарии:
1. Есть прогресс? Если у вас есть другие проблемы, пожалуйста, добавьте подробности здесь.
Ответ №1:
Попробуйте?
Select distinct c.Name,ARRAY(SELECT n.Brand,n.Category,n.Type FROM n IN c.Car where n.Brand = 'benci') as Car from c JOIN t in c.Car where t.Brand='benci'
Комментарии:
1. Я хочу использовать orderby с приведенным выше запросом. Но OredrBy должен быть только по имени. Выдает ошибку при запуске из приложения-функции
2. Добрый день, сэр! Точно, я не эксперт в функциях Azure, и я думаю, вы можете задать другой вопрос с более подробной информацией, должно быть больше людей, чтобы увидеть :). @Deepcoder
3. Из-за некоторых ограничений я не смогу использовать ключевое слово DISTINCT. Есть ли какой-либо другой подход, позволяющий избежать дублирования
4. Боюсь, что нет. Здесь нам нужно использовать
join
для достижения подзапроса, это приведет к результату подзапроса, а mainquery имеет «декартово произведение»? Это означает, что появятся дубликаты. И cosmosdb не предлагает никаких других функций, кромеdistinct
тех, которые я знаю. Поэтому я не должен использовать DISTINCT, я думаю, вам нужно удалить дубликаты в вашем бэкэнд-коде.