dgraph icon indicating copy to clipboard operation
dgraph copied to clipboard

[FEATURE]: Support Map types

Open RJKeevil opened this issue 1 year ago • 2 comments

Use case

We have a number of use cases where having a map type predicate would simplify our usage of dgraph. A good example is real-world address node, which may have multiple known address strings that refer to that address (e.g. ["32 Heren Gracht, Amsterdam, 1015BA","32, Herengracht, Amsterdam, 1015BA, NL"]). We run the addresses through a parser to extract known features such as number, postcode, country etc. Storing these as separate properties is problematic as it loses the lineage/grouping (which house number goes with which postcode etc in the raw data). A map (or preferably, a set of maps) would allow such nested/grouped structures.

I know this could instead be modelled as child nodes, but that a) makes our logic much more complex, and b) doesnt model the data in a way suitable for client usage patterns. So for now we marshall maps backwards and forwards from strings to achieve this.

Links to Discuss, RFC or previous Issues and PRs

No response

Links to examples and research

https://docs.arcadedb.com/#DataTypes https://neo4j.com/docs/cypher-manual/current/values-and-types/maps/

Current state

As mentioned, can marshal to or from strings, or use child nodes, but both are suboptimal via perfomance overhead and query complexity

Solution proposal

Main complexity would be this will need a mechanism to query fields within maps. Perhaps libraries like https://github.com/elgs/jsonql can be of inspiration for what functionality may be of use here. For MVP just having a map object that i interact with client side would be already a big help.

Additional Information

No response

RJKeevil avatar Aug 26 '24 14:08 RJKeevil

Can you try storing the map as a list of bytes using default directive? Or just by using jq urself to store it as a string?

ghost avatar Aug 26 '24 14:08 ghost

Yes, that is essentially what I do. It works ok, but having true map support would be a good feature I think, especially if i could subquery them.

RJKeevil avatar Aug 26 '24 14:08 RJKeevil