node.js - Neo4j 将数据序列化为 JSON

标签 node.js rest serialization neo4j cypher

我正在尝试使用 Node.js 构建一个 Rest api,它使用 Neo4j-Bolt-Driver连接到 Neo4j-Db。

随着图的端点和复杂性的增长,编写和维护大量长 Cypher 查询变得越来越困难。

我在提供填充的 JSON 对象时遇到一些困难,这些对象应该包含与其他 Node 的一些关系。

下面您将看到针对 GET/api/me 端点的查询。

MATCH (user:User) WHERE user.uuid = {userId}
OPTIONAL MATCH (user)-[:PROFILE_IMAGE]->(profileImage:Image)
OPTIONAL MATCH (user)-[:HEADER_IMAGE]->(headerImage:Image)
OPTIONAL MATCH (user)-[:OWNS]->(productToEmbed:Product)-[:TYPE]->(productType:ProductType)
WITH user, COLLECT(productToEmbed{.*, type: productType.name }) AS products
RETURN user{.*, products: products, profileImage: profileImage{.*}, headerImage: headerImage{.*}}

当连接到用户的 Node 可以具有不同的标签时,情况会变得更糟。在这种情况下;我应该在 cypher 查询中编写一个 switch case 表达式来正确填充相关字段,但感觉不正确。

对此有什么建议吗?

最佳答案

您可以做的一件事是使用模式理解来处理可选匹配并在一个步骤中收集。只是一个小的语法改进。

MATCH (user:User) WHERE user.uuid = {userId}
OPTIONAL MATCH (user)-[:PROFILE_IMAGE]->(profileImage:Image)
OPTIONAL MATCH (user)-[:HEADER_IMAGE]->(headerImage:Image)
WITH user, profileImage, headerImage, 
 [(user)-[:OWNS]->(productToEmbed:Product)-[:TYPE]->(productType:ProductType) | 
 productToEmbed {.*, type: productType.name}] as products
RETURN user{.*, products, profileImage, headerImage}

对于其他具有不同标签和字段的 Node ,您能否提供示例?

关于node.js - Neo4j 将数据序列化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44230686/

相关文章:

javascript - Sequelize - 如何在关联中使用运算符 AND n :n

java - 使用 Spring-Data-Rest 以 XML 而不是 JSON 的形式返回响应

java - 即使在定义显式 ID 之后,也会使用隐式 SerialVersionID,为什么?

java - WAS 服务器中的 org/codehaus/jackson/map/ObjectMapper.setSerializationInclusion 异常

asp.net - 在 Web API/APIController 中控制序列化

Java 序列化问题

node.js - 如何在 gulp 中使用 jsdoc?

javascript - 获取/监听 channel 中的新消息

Node.js+Socket.io,建立的连接不断增加

rest - 内部错误 (500) 是否应该成为 Swagger API 文档的一部分?