#graph #neo4j #cypher
#График #neo4j #шифр
Вопрос:
В настоящее время у меня есть этот запрос:
OPTIONAL MATCH (t)<-[r:CHILD_OF]-(t1:Thing)<-[:TAGGED]-(post:Post)
и позже у меня есть
OPTIONAL MATCH (this)<-[:TAGGED]-(post:Post)
и поскольку все они возвращаются вместе (в виде списка сообщений), я не знаю, какие сообщения были дочерними элементами вещи, а какие просто помечены «this» напрямую.
Возможно ли вернуть, когда здесь присутствует «r», который является именем переменной связи «CHILD_OF»?
Полный пост выглядит примерно так:
OPTIONAL MATCH (this)<-[:CHILD_OF]-(t1:Thing)<-[:TAGGED]-(post:Post)
WITH COLLECT(post) as rows, this
OPTIONAL MATCH (this)<-[:TAGGED]-(p:Post)
WITH rows COLLECT(p) as allRows
UNWIND allRows as post
RETURN DISTINCT post
ORDER BY post.date DESC
Я не хочу, чтобы это было как карта, поскольку neo4j-graphql-js этого не поддерживает, они поддерживают исключительно возврат отдельных узлов. Поэтому я также не могу выполнить return post, r
type Thing {
id: ID!,
name: String,
description: String,
image: String,
followers: [User] @relation(name: "FOLLOWS", direction: "IN"),
posts: [Post] @cypher(statement: """
OPTIONAL MATCH (this)<-[:CHILD_OF]-(t1:Thing)<-[:TAGGED]-(post:Post)
WITH COLLECT(post) as rows, this
OPTIONAL MATCH (this)<-[:TAGGED]-(p:Post)
WITH rows COLLECT(p) as allRows
UNWIND allRows as post
RETURN DISTINCT post
ORDER BY post.date DESC
""")
}
type User {
id: ID!,
uid: String,
name: String,
email: String,
bio: String,
followers: [User] @relation(name: "FOLLOWS", direction: "OUT"),
post_count: Int @cypher(statement: """
MATCH (this)-[:WROTE]->(p:Post)
RETURN count(p)
"""),
homepage_posts: [Post] @cypher(statement: """
OPTIONAL MATCH (this)-[r:FOLLOWS]->(something)-[:WROTE|TAGGED]-(post:Post)
WITH COLLECT(post) as rows
OPTIONAL MATCH (this)-[:WROTE]->(post:Post)
WITH rows COLLECT(post) as allRows
UNWIND allRows as post
RETURN DISTINCT post
ORDER BY post.date DESC
""")
}
type Relationship {
type: String
}
type Post {
id: ID!,
body: String,
images: [String],
date: DateTime,
isRetweet: Boolean,
rating: Float,
relationship: Relationship,
author: User @relation(name: "WROTE", direction: "IN"),
things: [Thing] @relation(name: "TAGGED", direction: "OUT"),
likes: [User] @cypher(statement: """
MATCH (u:User)-[r:LIKES]->(this)
RETURN u
"""),
}
Комментарии:
1. Neo4j-graphql-js поддерживает map? Вам нужно будет определить пользовательский тип, хотя, вероятно
2. Я не думаю, что вы можете вернуть карту, nei4j-graphql-js ожидает возврата узла, нет? Я что-то не так понимаю?
3. Основному запросу нужен узел, если вы хотите использовать «это» в подзапросах. Вы можете вернуть карту в подзапросах, если ее возвращаемый тип не имеет никаких подзапросов. Итак, основная причина, по которой вам нужен узел, заключается в подзапросах, иначе вы можете вернуть карту
4. Привет, Томас — я не понимаю, как это может выглядеть? Когда я попытался вернуть карту, это не сработало. Также, когда я пытался использовать виртуальный узел, он работал в браузере, но не в neo4j-graphql-js.
5. Кажется, я не могу вернуть узел и его связь таким образом, чтобы neo4j-graphql-js принял, должен ли он быть узлом? У вас есть какие-либо идеи? Заранее благодарю!