Comments (3)
Digging deeper - If we take the query that's failing:
{
movies(where: { title_CONTAINS: "Matrix Reloaded, The" }) {
title
actors(options: { limit: 1 }) {
name
acted_in(options: { limit: 3, sort: { year: DESC } }) {
title
}
}
}
}
The cypher produced is:
MATCH (this:Movie)
WHERE this.title CONTAINS $this_title_CONTAINS
RETURN this {
.title,
actors: [ (this)<-[:ACTED_IN]-(this_actors:Actor) | this_actors {
.name,
acted_in: apoc.coll.sortMulti([ (this_actors)-[:ACTED_IN]->(this_actors_acted_in:Movie) | this_actors_acted_in { .title } ], ['year'])[..3]
} ][..1]
} AS this
Looking at what neo4j-graphql-js
does... We should still project the property so it can be sorted on:
MATCH (this:Movie)
WHERE this.title CONTAINS $this_title_CONTAINS
RETURN this {
.title,
actors: [ (this)<-[:ACTED_IN]-(this_actors:Actor) | this_actors {
.name,
- acted_in: apoc.coll.sortMulti([ (this_actors)-[:ACTED_IN]->(this_actors_acted_in:Movie) | this_actors_acted_in { .title } ], ['year'][..3],
+ acted_in: apoc.coll.sortMulti([ (this_actors)-[:ACTED_IN]->(this_actors_acted_in:Movie) | this_actors_acted_in { .title, .year } ], ['year'])[..3]
} ][..1]
} AS this
This does mean that on particular usages, such as this issue raised, we are selecting a field that is not asked for and relying on the GraphQL runtime to filter out that field.
from graphql.
@johnymontana Thanks for the clarity and steps to reproduce I can produce this locally also.
from graphql.
Right, it's an unfortunate consequence of using apoc.coll.sortMulti
as a post-processing step of the pattern comprehension. If the Cypher pattern comprehension supported ordering then the additional field wouldn't need to be selected and the database would just take care of it.
There's an outstanding card to add this functionality to Cypher here, I'll ping that card with this example as another use case where it would make sense to add to Cypher.
from graphql.
Related Issues (20)
- `Neo4jError: Invalid input 'WHERE': expected` when using auth in specific scenarios HOT 3
- Argument "phrase" is blocked for custom cypher queries since Neo4j-GraphQL >5 HOT 2
- Querying an interface produces very slow query with a lot of UNION HOT 4
- Neo4jError: Variable not defined caused by authorization filters HOT 4
- Model.find({where: {id}}) returns wrong output. HOT 6
- Regression on ID scalar type filtering HOT 8
- Neo4jError: Variable `<propertyName>Count` not defined HOT 5
- Error "Cannot return null for non-nullable field" when limit exceeds result count in queries with non-nullable fields HOT 2
- Authorization rules can't compare enum property with context HOT 3
- Compatibility of @neo4j/graphql with neo4j-driver HOT 16
- GraphQL parsing issue with `[[String!]]!` HOT 2
- Filtering issue in `@authorization` directive HOT 2
- Nested mutation with deep connect inside a create is failing with the error- Neo4jError: Variable `this` already declared HOT 3
- Creating distinct relationships on interface field no longer possible since v5 if the interface does not include common identifier HOT 5
- @authentication doesn't work HOT 4
- ```authorization doesn't work``` HOT 1
- How to make custom resolver for create users
- Custom resolver for auto-generated resolvers HOT 2
- Spatial type projection fails if the `srid` is included in the SelectionSet HOT 2
- Generated `*OnCreateInput` types do not include fields to connect/create types with `@relationship` directives HOT 10
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from graphql.