dgraph-io/dgraph · error
Cannot specify order at both args and facets
Error message
Cannot specify order at both args and facets
What it means
Ordering can be supplied either as orderasc/orderdesc/orderby arguments or inside a @facets(...) order clause, but not both at once, since the two orderings would conflict. treeCopy compares args.Order and args.FacetsOrder after filling arguments and rejects the combination.
Source
Thrown at query/query.go:604
if gchild.IsCount {
if len(gchild.Children) != 0 {
return errors.New("Node with count cannot have child attributes")
}
args.DoCount = true
}
for argk := range gchild.Args {
if !isValidArg(argk) {
return errors.Errorf("Invalid argument: %s", argk)
}
}
if err := args.fill(gchild); err != nil {
return err
}
if len(args.Order) != 0 && len(args.FacetsOrder) != 0 {
return errors.Errorf("Cannot specify order at both args and facets")
}
dst := &SubGraph{
Attr: gchild.Attr,
Params: args,
}
if gchild.MathExp != nil {
mathExp := &mathTree{}
if err := mathCopy(mathExp, gchild.MathExp); err != nil {
return err
}
dst.MathExp = mathExp
}
if gchild.Func != nil &&
(gchild.Func.IsAggregator() || gchild.Func.IsPasswordVerifier()) {
if len(gchild.Children) != 0 {
return errors.Errorf("Node with %q cant have child attr", gchild.Func.Name)View on GitHub (pinned to 759e242be6)
Solutions
- Keep only one ordering: remove the args-level orderasc/orderdesc/orderby if facet order is what you need
- Or remove the @facets(orderby:...) clause if node ordering is primary; facets can still be fetched with plain @facets(facet-name)
- If both orders are truly needed, split across two aliased query branches
Example fix
// before
{
me(func: uid(0x1)) {
friend(orderasc: name) @facets(orderby: weight)
}
}
// after
{
me(func: uid(0x1)) {
friend @facets(orderby: weight) {
name
}
}
} Defensive patterns
Strategy: validation
Validate before calling
function assertSingleOrderSource(node) {
const hasArgOrder = ['orderasc','orderdesc','orderby'].some(a => a in node.args);
const hasFacetOrder = /@facets\s*\([^)]*order/.test(node.fieldSrc || '');
if (hasArgOrder && hasFacetOrder) throw new Error('Specify order either in args or in facets, not both');
} Type guard
const hasConflictingOrders = (n) => n.args && (n.args.orderasc || n.args.orderdesc || n.args.orderby) && n.facetsOrder && n.facetsOrder.length > 0;
Try / catch
try {
await txn.query(q);
} catch (e) {
if (e.message.includes('order at both args and facets')) {
throw new Error('Drop either the args-level order or @facets(orderby:...)');
}
throw e;
} Prevention
- Decide one ordering source per node: node order or facet order
- Builders should strip args-order when facet order is set (or vice versa)
- Code-review facet queries for combined order directives
When it happens
Trigger: A node has both `orderasc: predicate` (or orderby) in args and `@facets(orderby: ...)` on the same child, e.g. `friend(orderasc: name) @facets(orderby: weight)`.
Common situations: Users wanting to order nodes and simultaneously order facets copy both forms into one line; older queries with facet ordering later augmented with node-level ordering without removing one.
Related errors
- One argument expected in %s, but got %d.
- Fn %s not supported in preprocessFilter.
- Expected 1 child for not but got %d.
- Expected 2 child for not but got %d.
- Unsupported operation in facet filtering: %s.
AI-assisted analysis of dgraph-io/dgraph@759e242be6 (2026-09-01).
Data as JSON: /api/errors/051bad72293c4f73.
Report an issue: GitHub.