2015-11-08 5 views
1

У меня есть сборник документов. Документ имеет поле, значение которого представляет собой массив карт (например: карта с одним полем name). Структура такова:OrientDB: содержит весь оператор

{ 
    arrayfield: [ 
    { 
     name: "value1", 
    }, 
    { 
     name: "value2", 
    } 
    ] 
} 

Я хочу получать документы, в которых arrayfieds все карты содержат значения из указанного массива. В документации говорится, что я могу использовать оператора containsall. Я использую его таким образом:

select from SomeCollection where arrayfiled containsall (name in ['value1','value2']) 

Но эта конструкция всегда возвращает пустой результат. Где я ошибаюсь? Благодарю.

PS: Если мой вопрос непонятен, я могу опубликовать более подробный пример коллекции и результат, который я хочу получить.

+0

Какой тип собственности arrayfiled? –

+0

Это массив. – bartl

+0

Вы можете отправить результат следующего запроса: «select from SomeCollection»? Я бы понял, если arrayfiled имеет тип embedded, embeddedList, embeddedSet, emnbeddedMap, link, linkList, linkMap, linkSet –

ответ

0

Найдено решение, чтобы решить мою проблему без containsAll:

select from SomeCollection where not (arrayfield contains (fname not in ["value1", "value2"]))

0

Попробуйте следующий запрос

select from SomeCollection where arrayfiled.name contains "value1" and arrayfiled.name contains "value2" 

enter image description here

+0

Спасибо за ответ. Но это не совсем то, что мне нужно. Позвольте мне описать ситуацию. У меня есть массив строк: [value1, value2, value3, ...] (из сетевого запроса). И мне нужно запросить документы, удовлетворяющие следующему условию: ** все ** его элементы в 'arrayfield' должны иметь имя из переданного массива строк. И длина массива строк может быть больше числа элементов в 'arrayfield' – bartl

+0

. Query должен возвращать строки 10: 1, 10: 2, 10: 3 и 10: 7 из вашего тестового примера для массива входных строк' [ "value1", "value2"] '. – bartl

+0

Также я могу изменить предложение 'where' запроса во время выполнения, если это поможет решить эту проблему – bartl

Смежные вопросы