Backend update Apr 95th 2018

GROQ Improvements

Breaking Changes

  • GROQ: the syntax someArray[] == someValue was accidentally supported, even though it is semantically invalid. This has now been fixed, and support for this syntax has been removed. Use someValue in someArray instead.


  • Documents can now contain attributes with null values.
  • GROQ supports JSON escape sequences in strings (including Unicode sequences).
  • Listeners can now specify includeMutations=false to exclude mutation data (e.g. patches) in events.


  • GROQ: result windows beyond 100 documents no longer have duplicates or missing documents.
  • GROQ: results beyond 1000 now return the correct number of results. Before, e.g. *[1500...1600] returned 1600 documents.
  • GROQ: Arrays can now be used in filters, e.g. *["Oxygen" in constituents[].element].title.
  • GROQ: fractional numbers in queries are now correctly parsed as 64-bit floats (as in documents), not 32-bit floats. This enables comparisons such as *[ pi == 3.14 ].
  • GROQ: the match operator now supports using attributes on the right-hand side, e.g. *[body match title].
  • GROQ: the || operator will now correctly return false instead of null with certain operands.
  • JSONPath: mutations no longer crash on comparisons with attributes on the right-hand side, e.g. products[?(newPrice != missing)].


  • GROQ: significant performance improvements when querying large, nested documents.