SQL-запрос для использования .split () и .include ( - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть приведенный ниже SQL-запрос для моей базы данных Azure Cosmos DB

SELECT distinct c.id1,stuff.id2,e.id3 FROM c
join stuff in c.stuff
join d in stuff.a.b.c.d
join e in  d.e
where ARRAY_CONTAINS(e.classes,{name:"${searchWord}"},true)

Проблема, с которой я сталкиваюсь, заключается в том, что она возвращает только точные name совпадения.

Что я пытаюсь выполнитьнужно найти любой name, который включает searchWord, аналогичный classes.name.split(' ').includes(searchWord) - например, вернуть «зеленую чашку», когда searchWord == cup.В узле это будет:

   var splice = name.split(' ');
   if(splice.includes(searchWord))

Может ли кто-нибудь помочь разобраться, где я иду не так?

1 Ответ

0 голосов
/ 19 сентября 2018

JDT.Я предполагал, что вы хотите реализовать функцию, аналогичную LIKE, в Cosmos DB SQL API.Ключевое слово для LIKE здесь CONTAINS.Если у вас есть документ со свойством firstName и вы хотите выполнить фильтрацию по имени 'bob', вы бы использовали его в запросе следующим образом:

"SELECT * FROM c WHERE CONTAINS(c.firstName, 'bob')"

, пожалуйста попробуйте ниже sql:

SELECT distinct c.id1,stuff.id2,e.id3 FROM c
join stuff in c.stuff
join d in stuff.a.b.c.d
join e in  d.e
join class in e.classes
where contains(class.name,"trees")

Надеюсь, это поможет вам. Любая проблема, пожалуйста, дайте мне знать. (Возможно, имеет разрыв часового пояса)


Обновление Ответ:

Хорошо, я понял вашу идею.Но извините, в настоящее время нет такого ключевого слова или функции, как вы сказали в cosmos db.Так что я не думаю, что вы можете полностью положиться на sql.Вы можете попробовать комбинацию SQL и кода, которая устраняет множество циклов и уменьшает нагрузку на код, что также может удовлетворить ваши индивидуальные потребности.

Кроме того, вы можете отправить отзыв попросить команду Azure Cosmos DB Team поддержать такую ​​функцию в будущем.

...