Skip to content

Releases: hasura/ndc-mongodb

v1.4.0

15 Nov 01:54
8b5a862
Compare
Choose a tag to compare

Added

  • Adds _in and _nin operators (#122)

Changed

  • BREAKING: If configuration.json cannot be parsed the connector will fail to start. This change also prohibits unknown keys in that file. These changes will help to prevent typos configuration being silently ignored. (#115)

Fixed

  • Fixes for filtering by complex predicate that references variables, or field names that require escaping (#111)
  • Escape names if necessary instead of failing when joining relationship on field names with special characters (#113)

_in and _nin

These operators compare document values for equality against a given set of
options. _in matches documents where one of the given values matches, _nin matches
documents where none of the given values matches. For example this query selects
movies that are rated either "G" or "TV-G":

query {
  movies(
    where: { rated: { _in: ["G", "TV-G"] } }
    order_by: { id: Asc }
    limit: 5
  ) {
    title
    rated
  }
}

v1.3.0

02 Oct 10:40
47fc3c3
Compare
Choose a tag to compare

Added

Fixed

  • Selecting nested fields with names that begin with a dollar sign (#108)
  • Sorting by fields with names that begin with a dollar sign (#109)

Changed

v1.2.0

16 Sep 20:44
2e0696e
Compare
Choose a tag to compare

Added

  • Extended JSON fields now support all comparison and aggregation functions (#99)
  • Update to ndc-spec v0.1.6 which allows filtering by object values in array fields (#101)

Filtering by values in arrays

In this update you can filter by making comparisons to object values inside
arrays. For example consider a MongoDB database with these three documents:

{ "institution": "Black Mesa", "staff": [{ "name": "Freeman" }, { "name": "Calhoun" }] }
{ "institution": "Aperture Science", "staff": [{ "name": "GLaDOS" }, { "name": "Chell" }] }
{ "institution": "City 17", "staff": [{ "name": "Alyx" }, { "name": "Freeman" }, { "name": "Breen" }] }

You can now write a GraphQL query with a where clause that checks individual
entries in the staff arrays:

query {
  institutions(where: { staff: { name: { _eq: "Freeman" } } }) {
    institution
  }
}

Which produces the result:

{ "data": { "institutions": [
  { "institution": "Black Mesa" },
  { "institution": "City 17" } 
] } }

The filter selects documents where any element in the array passes the
condition. If you want to select only documents where every array element
passes then negate the comparison on array element values, and also negate the
entire predicate like this:

query EveryElementMustMatch {
  institutions(
    where: { _not: { staff: { name: { _neq: "Freeman" } } } }
  ) {
    institution
  }
}

Note: It is currently only possible to filter on arrays that contain
objects. Filtering on arrays that contain scalar values or nested arrays will
come later.

To configure DDN metadata to filter on array fields configure the
BooleanExpressionType for the containing document object type to use an
object boolean expression type for comparisons on the array field. The
GraphQL Engine will transparently distribute object comparisons over array
elements. For example the above example is configured with this boolean
expression type for documents:

---
kind: BooleanExpressionType
version: v1
definition:
  name: InstitutionComparisonExp
  operand:
    object:
      type: Institution
      comparableFields:
        - fieldName: id
          booleanExpressionType: ObjectIdComparisonExp
        - fieldName: institution
          booleanExpressionType: StringComparisonExp
        - fieldName: staff
          booleanExpressionType: InstitutionStaffComparisonExp
      comparableRelationships: []
  logicalOperators:
    enable: true
  isNull:
    enable: true
  graphql:
    typeName: InstitutionComparisonExp

InstitutionStaffComparisonExp is the boolean expression type for objects
inside the staff array. It looks like this:

---
kind: BooleanExpressionType
version: v1
definition:
  name: InstitutionStaffComparisonExp
  operand:
    object:
      type: InstitutionStaff
      comparableFields:
        - fieldName: name
          booleanExpressionType: StringComparisonExp
      comparableRelationships: []
  logicalOperators:
    enable: true
  isNull:
    enable: true
  graphql:
    typeName: InstitutionStaffComparisonExp

Fixed

Changed

v1.1.0

16 Aug 18:53
eab7265
Compare
Choose a tag to compare
  • Accept predicate arguments in native mutations and native queries (#92)
  • Serialize aggregate results as simple JSON (instead of Extended JSON) for
    consistency with non-aggregate result serialization (#96)

v1.0.0

10 Jul 12:49
4beb7dd
Compare
Choose a tag to compare
  • Fix bug with operator lookup when filtering on nested fields (#82)
  • Rework query plans for requests with variable sets to allow use of indexes (#83)
  • Fix: error when requesting query plan if MongoDB is target of a remote join (#83)
  • Fix: count aggregates return 0 instead of null if no rows match (#85)
  • Breaking change: remote joins no longer work in MongoDB v5 (#83)
  • Add configuration option to opt into "relaxed" mode for Extended JSON outputs (#84)

v0.1.0

14 Jun 01:51
1752729
Compare
Choose a tag to compare
  • Support filtering and sorting by fields of related collections (#72)
  • Support for root collection column references (#75)
  • Fix for databases with field names that begin with a dollar sign, or that contain dots (#74)
  • Implement column-to-column comparisons within the same collection (#74)
  • Fix error tracking collection with no documents by skipping such collections during CLI introspection (#76)
  • If a field contains both int and double values then the field type is inferred as double instead of ExtendedJSON (#77)
  • Fix: schema generated with _id column nullable when introspecting schema via sampling (#78)
  • Don't require _id field to have type ObjectId when generating primary uniqueness constraint (#79)

v0.0.6

01 May 19:48
Compare
Choose a tag to compare
  • Enables logging events from the MongoDB driver by setting the RUST_LOG variable (#67)
    • To log all events set RUST_LOG=mongodb::command=debug,mongodb::connection=debug,mongodb::server_selection=debug,mongodb::topology=debug
  • Relations with a single column mapping now use concise correlated subquery syntax in $lookup stage (#65)
  • Add root configuration.json or configuration.yaml file to allow editing cli options. (#68)
  • Update default sample size to 100. (#68)
  • Add all_schema_nullable option defaulted to true. (#68)
  • Change native_procedure to native_mutation along with code renaming (#70)
    • Note: native_procedures folder in configuration is now deprecated. It will continue to work for a few releases, but renaming your folder is all that is needed.

v0.0.5

27 Apr 03:29
055154b
Compare
Choose a tag to compare
  • Fix incorrect order of results for query requests with more than 10 variable sets (#37)
  • In the CLI update command, don't overwrite schema files that haven't changed (#49)
  • In the CLI update command, if the database URI is not provided the error message now mentions the correct environment variable to use (MONGODB_DATABASE_URI) (#50)
  • Update to latest NDC SDK (#51)
  • Update rustls dependency to fix https://github.com/hasura/ndc-mongodb/security/dependabot/1 (#51)
  • Serialize query and mutation response fields with known types using simple JSON instead of Extended JSON (#53) (#59)
  • Add trace spans (#58)

v0.0.4

12 Apr 20:11
Compare
Choose a tag to compare
v0.0.4 Pre-release
Pre-release
  • Queries that attempt to compare a column to a column in the query root table, or a related table, will now fail instead of giving the incorrect result (#22)
  • Fix bug in v2 to v3 conversion of query responses containing nested objects (PR #27)
  • Fixed bug where use of aggregate functions in queries would fail (#26)
  • Rename Any type to ExtendedJSON to make its representation clearer (#30)
  • The collection primary key _id property now has a unique constraint generated in the NDC schema for it (#32)

v0.0.3

28 Mar 05:45
b50094a
Compare
Choose a tag to compare
v0.0.3 Pre-release
Pre-release
  • Use separate schema files for each collection (PR #14)
  • Changes to update CLI command (PR #17):
    • new default behaviour:
      • attempt to use validator schema if available
      • if no validator schema then sample documents from the collection
    • don't sample from collections that already have a schema
    • if no --sample-size given on command line, default sample size is 10
    • new option --no-validator-schema to disable attempting to use validator schema
  • Add any type and use it to represent mismatched types in sample documents (PR #18)