Как запросить подсписок в CosmosDB для получения желаемого результата

#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, я думаю, вам нужно удалить дубликаты в вашем бэкэнд-коде.