#azure #azure-cosmosdb #azure-cosmosdb-sqlapi
#azure #azure-cosmosdb #azure-cosmosdb-sqlapi
Вопрос:
Мне нужен запрос, который может получить мне документ из списка слов, например, если я использую
select c from c join (SELECT distinct VALUE c.id FROM c JOIN word IN c.words WHERE word in('word1',word2) and tag in('motorcycle')) ORDER BY c._ts desc
он принесет оба документа, я хочу получить только первый, потому что он соответствует двум словам, а не только одному.
Документ 1
"c": {
"id": "d0f1723c-0a55-454a-9cf8-3884f2d8d61a",
"words": [
"word1",
"word2",
"word3",
]}
Документ 2
"c": {
"id": "d0f1723c-0a55-454a-9cf8-3884f2d8d61a",
"words": [
"word1",
"word4",
"word5",
]}
Ответ №1:
Вы должны быть в состоянии покрыть это двумя ARRAY_CONTAINS
выражениями в вашем WHERE
предложении (и нет необходимости в a JOIN
):
SELECT c.id FROM c
WHERE ARRAY_CONTAINS(c.words, 'word1')
AND ARRAY_CONTAINS(c.words, 'word2')
Это должно вернуть идентификатор вашего первого документа.
Комментарии:
1. это сработало, но есть ли какой-либо другой способ использовать предложение IN?
2. В вашем случае вы пытаетесь включить два определенных элемента (то есть два разных совпадения). Не существует версии «сопоставить все»
ARRAY_CONTAINS()
, поэтому я не могу представить, как вы могли бы сделать это по-другому в рамках одного запроса. И вы можете изучить стоимость RU. Когда я запускал это в целях тестирования для вас, оно было меньше 6 RU (правда, у меня было только два документа, но дело в том, что … это не очень дорогой запрос).