从collect返回一个对象(cypher/neo4j)

bor*_*ytm 2 neo4j cypher

我正在尝试以用户指定的语言返回内容,或者如果未在所选语言中找到内容,则返回默认语言(英语).似乎不支持从collect语句返回对象.有没有办法达到类似的结果呢?

现在的查询:

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
Run Code Online (Sandbox Code Playgroud)

问题是我真正想要返回的是一个具有节点名称和语言代码的对象.就像是:

collect(langNode.name, langNode.languageCode) AS terms
Run Code Online (Sandbox Code Playgroud)

或这个:

collect(langNode.name) AS terms.name, 
collect(langNode.languageCode) AS terms.languageCode
Run Code Online (Sandbox Code Playgroud)

当然,这种语法不起作用.这有什么简单的解决方案吗?

jja*_*erg 5

我不确定我的模型究竟是如何工作的,但你可以通过地图和集合文字来实现你想要的.对于您的第一个示例,您可以进行试验

collect ( [langNode.name, langNode.languageCode] ) as terms
Run Code Online (Sandbox Code Playgroud)

和第二个例子

{name:collect (langNode.name), languageCode:collect (langNode.languageCode) } as terms
Run Code Online (Sandbox Code Playgroud)

要么

collect ( {name:langNode.name, languageCode:langNode.languageCode} ) as terms
Run Code Online (Sandbox Code Playgroud)