Почему 'AND NOT (value.title IN ['item1','item2']' не возвращает правильный результат в anormcypher, но работает в консоли neo4j?

Anormcypher 0.80, Scala 2.11.7

Я пытаюсь исключить список элементов из набора результатов шифрования, используя 'AND NOT (value.title IN ['item1','item2']'.

Запускаемый мной шифровый запрос работает в консоли neo4j, но не исключает item1 и item2, когда я пытаюсь выполнить один и тот же запрос с помощью anormcypher. запрос выглядит следующим образом:

MATCH (c:Item)-[:INCLUDES_TERM]-(t:Term),(b:Box)-[:CONTAINS_TERM]-(t), 
 (b)-[r:IS_ABOUT_THING]-(thm:Thing) 
 where c.name = 'aName'
 AND NOT (thm.title IN [('item1','item2')]) 
 AND b.date >= 1443657600000 AND b.date <= 1443657700000 
 return DISTINCT(thm.title) as thing, count(b) as amount 
 order by amount desc  LIMIT 50

В консоли neo4j этот зашифрованный запрос вернет результат с отфильтрованным item1 и item2.

Если я выполню запрос из scala с использованием anormcypher, item1 и item2 не будут отфильтрованы из результата. Это код:

val exclusions:String = "'item1','item2'"
val name = "aName"
val startDate = "1443657600000"
val endDate = "1443657700000"
val cypherQuery = Cypher("""MATCH (c:Item)-[:INCLUDES_TERM]-(t:Term),(b:Box)-[:CONTAINS_TERM]-(t), 
   (b)-[r:IS_ABOUT_THING]-(thm:Thing) 
   where c.name = {item} 
   AND NOT (thm.title IN [{exclusions}]) 
   AND b.date >= {startDate} AND b.date <= {endDate} 
   return DISTINCT(thm.title) as thing, count(b) as amount 
   order by amount desc  LIMIT 50"""
).on("item" -> name, "startDate" -> startDate, "endDate" -> endDate, "exclusions" -> exclusions)
val resultList = cypherQuery.apply()

Почему этот запрос работает в консоли neo4j, но не работает в scala с использованием anormcypher?

1 ответ

exclusions Параметр должен быть массивом строк, а не единственной строкой, встроенной в массив. Попробуй это:

val exclusions: Array[String] = Array("item1", "item2")
val name = "aName"
val startDate = "1443657600000"
val endDate = "1443657700000"
val cypherQuery = Cypher("""MATCH (c:Item)-[:INCLUDES_TERM]-(t:Term),(b:Box)-[:CONTAINS_TERM]-(t), 
   (b)-[r:IS_ABOUT_THING]-(thm:Thing) 
   where c.name = {item} 
   AND NOT (thm.title IN {exclusions}) 
   AND b.date >= {startDate} AND b.date <= {endDate} 
   return DISTINCT(thm.title) as thing, count(b) as amount 
   order by amount desc  LIMIT 50"""
).on("item" -> name, "startDate" -> startDate, "endDate" -> endDate, "exclusions" -> exclusions)
val resultList = cypherQuery.apply()
Другие вопросы по тегам