从collect返回对象(cypher/neo4j)
我正在尝试以用户指定的语言返回内容,如果在所选语言中找不到内容,则返回默认语言(英语)。似乎不支持从collect语句返回对象。有没有办法达到类似的效果呢 查询现在的状态:从collect返回对象(cypher/neo4j),neo4j,cypher,Neo4j,Cypher,我正在尝试以用户指定的语言返回内容,如果在所选语言中找不到内容,则返回默认语言(英语)。似乎不支持从collect语句返回对象。有没有办法达到类似的效果呢 查询现在的状态: MATCH (meta:contentMeta)<-[metaLang:HAS_META]-(content:content)-[:TAGGED_WITH]-(termNode:term)-[lang:HAS_LANGUAGE]-(langNode:termMeta) WHERE metaLang.langu
MATCH (meta:contentMeta)<-[metaLang:HAS_META]-(content:content)-[:TAGGED_WITH]-(termNode:term)-[lang:HAS_LANGUAGE]-(langNode:termMeta)
WHERE
metaLang.languageCode = {language}
OR metaLang.languageCode = {defaultLanguage}
AND lang.languageCode = {language}
OR lang.languageCode = {defaultLanguage}
RETURN DISTINCT collect(langNode.name) AS terms,
content.displayType AS displayType,
content.savedAs AS savedAs,
content.webURL AS webURL,
content.embedSrc AS embedsrc,
content.UUID AS UUID
LIMIT 15
或者这个:
collect(langNode.name) AS terms.name,
collect(langNode.languageCode) AS terms.languageCode
当然,这种语法不起作用。有什么简单的解决方案吗?我不太清楚您的模型是如何工作的,但您可能可以通过映射和集合文字实现您想要的。对于您的第一个示例,您可以尝试
collect ( [langNode.name, langNode.languageCode] ) as terms
第二个例子
{name:collect (langNode.name), languageCode:collect (langNode.languageCode) } as terms
或
我也不确定您的模型是如何工作的,但我看到了一些可能的错误和优化机会 在我下面建议的Cypher查询中,我在第一行添加了两个箭头,以指示我认为正确的关系方向性——这可以加快速度。我还删除了不需要的变量名 此外,目前尚不清楚您当前的布尔测试是否(始终)按预期工作,因为neo4j手册没有记录OR和and运算符之间的运算符优先级。因此,我简化了布尔测试,并使用“IN”操作符确保它们(始终)按预期工作 最后,我认为您不需要collect(),因为可能每个术语只有一种语言
MATCH (:contentMeta)<-[metaLang:HAS_META]-(content:content)<-[:TAGGED_WITH]-(:term)-[lang:HAS_LANGUAGE]->(langNode:termMeta)
WHERE metaLang.languageCode IN [{language}, {defaultLanguage}] AND lang.languageCode IN [{language}, {defaultLanguage}]
RETURN DISTINCT {name:langNode.name, languageCode:langNode.languageCode} AS terms,
content.displayType AS displayType,
content.savedAs AS savedAs,
content.webURL AS webURL,
content.embedSrc AS embedsrc,
content.UUID AS UUID
LIMIT 15
匹配(:contentMeta)
collect ( {name:langNode.name, languageCode:langNode.languageCode} ) as terms
MATCH (:contentMeta)<-[metaLang:HAS_META]-(content:content)<-[:TAGGED_WITH]-(:term)-[lang:HAS_LANGUAGE]->(langNode:termMeta)
WHERE metaLang.languageCode IN [{language}, {defaultLanguage}] AND lang.languageCode IN [{language}, {defaultLanguage}]
RETURN DISTINCT {name:langNode.name, languageCode:langNode.languageCode} AS terms,
content.displayType AS displayType,
content.savedAs AS savedAs,
content.webURL AS webURL,
content.embedSrc AS embedsrc,
content.UUID AS UUID
LIMIT 15