diff --git a/examples/node/Examples/data-types.js b/examples/node/Examples/data-types.js new file mode 100644 index 0000000000..ab3803d9a7 --- /dev/null +++ b/examples/node/Examples/data-types.js @@ -0,0 +1,63 @@ +import Realm from "realm"; + +describe("Node.js Data Types", () => { + test("should work with Mixed Type", async () => { + // :code-block-start: define-mixed-in-schema + const DogSchema = { + name: "Dog", + properties: { + name: "string", + birthDate: "mixed", + }, + }; + // :code-block-end: + + const realm = await Realm.open({ + schema: [DogSchema], + }); + + // :code-block-start: create-objects-with-mixed-values + realm.write(() => { + // create a Dog with a birthDate value of type string + realm.create("Dog", { name: "Euler", birthDate: "December 25th, 2017" }); + + // create a Dog with a birthDate value of type date + realm.create("Dog", { + name: "Blaise", + birthDate: new Date("August 17, 2020"), + }); + // create a Dog with a birthDate value of type int + realm.create("Dog", { + name: "Euclid", + birthDate: 10152021, + }); + // create a Dog with a birthDate value of type null + realm.create("Dog", { + name: "Pythagoras", + birthDate: null, + }); + }); + // :code-block-end: + + // :code-block-start: query-objects-with-mixed-values + // To query for Blaise's birthDate, filter for his name to retrieve the realm object. + // Use dot notation to access the birthDate property. + let blaiseBirthDate = realm.objects("Dog").filtered(`name = 'Blaise'`)[0] + .birthDate; + console.log(`Blaise's birth date is ${blaiseBirthDate}`); + // :code-block-end: + expect(blaiseBirthDate).toEqual(new Date("August 17, 2020")); + + // delete the objects specifically created in this test to keep tests idempotent + const Euler = realm.objects("Dog").filtered(`name = 'Euler'`)[0]; + const Blaise = realm.objects("Dog").filtered(`name = 'Blaise'`)[0]; + const Euclid = realm.objects("Dog").filtered(`name = 'Euclid'`)[0]; + const Pythagoras = realm.objects("Dog").filtered(`name = 'Pythagoras'`)[0]; + realm.write(() => { + realm.delete(Euler); + realm.delete(Blaise); + realm.delete(Euclid); + realm.delete(Pythagoras); + }); + }); +}); diff --git a/source/examples/generated/node/data-types.codeblock.create-objects-with-mixed-values.js b/source/examples/generated/node/data-types.codeblock.create-objects-with-mixed-values.js new file mode 100644 index 0000000000..ab8b0517f0 --- /dev/null +++ b/source/examples/generated/node/data-types.codeblock.create-objects-with-mixed-values.js @@ -0,0 +1,20 @@ +realm.write(() => { + // create a Dog with a birthDate value of type string + realm.create("Dog", { name: "Euler", birthDate: "December 25th, 2017" }); + + // create a Dog with a birthDate value of type date + realm.create("Dog", { + name: "Blaise", + birthDate: new Date("August 17, 2020"), + }); + // create a Dog with a birthDate value of type int + realm.create("Dog", { + name: "Euclid", + birthDate: 10152021, + }); + // create a Dog with a birthDate value of type null + realm.create("Dog", { + name: "Pythagoras", + birthDate: null, + }); +}); diff --git a/source/examples/generated/node/data-types.codeblock.define-mixed-in-schema.js b/source/examples/generated/node/data-types.codeblock.define-mixed-in-schema.js new file mode 100644 index 0000000000..50f8ee7229 --- /dev/null +++ b/source/examples/generated/node/data-types.codeblock.define-mixed-in-schema.js @@ -0,0 +1,7 @@ +const DogSchema = { + name: "Dog", + properties: { + name: "string", + birthDate: "mixed", + }, +}; diff --git a/source/examples/generated/node/data-types.codeblock.query-objects-with-mixed-values.js b/source/examples/generated/node/data-types.codeblock.query-objects-with-mixed-values.js new file mode 100644 index 0000000000..cd3ea34e2f --- /dev/null +++ b/source/examples/generated/node/data-types.codeblock.query-objects-with-mixed-values.js @@ -0,0 +1,4 @@ +// To query for Blaise's birthDate, filter for his name to retrieve the realm object. +// Use dot notation to access the birthDate property. +let blaiseBirthDate = realm.objects("Dog").filtered(`name = 'Blaise'`)[0].birthDate; +console.log(`Blaise's birth date is ${blaiseBirthDate}`); diff --git a/source/sdk/node.txt b/source/sdk/node.txt index 71100930c5..c205fa7d31 100644 --- a/source/sdk/node.txt +++ b/source/sdk/node.txt @@ -12,6 +12,7 @@ MongoDB Realm Node.js SDK Quick Start Quick Start with Sync Fundamentals + Data Types Usage Examples Integration Guides Advanced Guides diff --git a/source/sdk/node/data-types.txt b/source/sdk/node/data-types.txt index 983cc3d950..af7774d7af 100644 --- a/source/sdk/node/data-types.txt +++ b/source/sdk/node/data-types.txt @@ -1,3 +1,32 @@ +.. _node-data-types: + ============================== Realm Data Types - Node.js SDK ============================== +.. default-domain:: mongodb + +.. contents:: On this page + :local: + :backlinks: none + :depth: 2 + :class: singlecol + +.. toctree:: + :titlesonly: + :hidden: + + Field Types + Collections + Dictionaries + Sets + Mixed + UUID + Embedded Objects + +- :doc:`Field Types ` +- :doc:`Collections ` +- :doc:`Dictionaries ` +- :doc:`Sets ` +- :doc:`Mixed ` +- :doc:`UUID ` +- :doc:`Embedded Objects ` \ No newline at end of file diff --git a/source/sdk/node/data-types/collections.txt b/source/sdk/node/data-types/collections.txt new file mode 100644 index 0000000000..f0675fafbd --- /dev/null +++ b/source/sdk/node/data-types/collections.txt @@ -0,0 +1,16 @@ +.. _node-data-types-collections: + +========================= +Collections - Node.js SDK +========================= + +.. default-domain:: mongodb + +.. contents:: On this page + :local: + :backlinks: none + :depth: 2 + :class: singlecol + +Overview +-------- diff --git a/source/sdk/node/data-types/dictionaries.txt b/source/sdk/node/data-types/dictionaries.txt new file mode 100644 index 0000000000..b0dc026ce2 --- /dev/null +++ b/source/sdk/node/data-types/dictionaries.txt @@ -0,0 +1,18 @@ +.. _node-data-types-dictionaries: + +========================== +Dictionaries - Node.js SDK +========================== + +.. default-domain:: mongodb + +.. contents:: On this page + :local: + :backlinks: none + :depth: 2 + :class: singlecol + +.. versionadded:: 10.5.0-beta.1 + +Overview +-------- \ No newline at end of file diff --git a/source/sdk/node/data-types/embedded-objects.txt b/source/sdk/node/data-types/embedded-objects.txt new file mode 100644 index 0000000000..c1ff8fd4cb --- /dev/null +++ b/source/sdk/node/data-types/embedded-objects.txt @@ -0,0 +1,13 @@ +.. _node-data-types-embedded-objects: + +============================== +Embedded Objects - Node.js SDK +============================== + +.. default-domain:: mongodb + +.. contents:: On this page + :local: + :backlinks: none + :depth: 2 + :class: singlecol diff --git a/source/sdk/node/data-types/field-types.txt b/source/sdk/node/data-types/field-types.txt new file mode 100644 index 0000000000..f9b36305cc --- /dev/null +++ b/source/sdk/node/data-types/field-types.txt @@ -0,0 +1,16 @@ +.. _node-data-types-field-types: + +========================= +Field Types - Node.js SDK +========================= + +.. default-domain:: mongodb + +.. contents:: On this page + :local: + :backlinks: none + :depth: 2 + :class: singlecol + + +{+client-database+} supports the following field data types: diff --git a/source/sdk/node/data-types/mixed.txt b/source/sdk/node/data-types/mixed.txt new file mode 100644 index 0000000000..4b3e280228 --- /dev/null +++ b/source/sdk/node/data-types/mixed.txt @@ -0,0 +1,65 @@ +.. _node-data-types-mixed: + +=================== +Mixed - Node.js SDK +=================== +.. default-domain:: mongodb + +.. contents:: On this page + :local: + :backlinks: none + :depth: 2 + :class: singlecol + +.. versionadded:: 10.5.0-beta.1 + +Overview +-------- +The mixed data type is a {+realm+} property type that can hold different data types. +Supported data types include: + +- bool +- int +- float +- double +- string +- Date +- Data +- UUID +- Set +- null + +.. note:: + + The mixed data type is indexable, but you can't use it as a primary key. + Because null is a permitted value, you can't declare a Mixed property as + optional. + +Realm Object Models +------------------- +To :ref:`set a property of your object model +` as mixed, set the property's type to +``"mixed"``. + +.. literalinclude:: /examples/generated/node/data-types.codeblock.define-mixed-in-schema.js + :language: javascript + +Create an Object With a Mixed Value +----------------------------------- +Create an object with a mixed value by running the :js-sdk:`realm.create() +` method within a write transaction. + +.. literalinclude:: /examples/generated/node/data-types.codeblock.create-objects-with-mixed-values.js + :language: javascript + +Query for Objects with a Mixed Value +------------------------------------ +Query for objects with a mixed value by running the +:js-sdk:`Collection.filtered() ` method and +passing in a :ref:`filter ` for a non-mixed field. You can +then print the value of the mixed property or the entire object itself. + +.. literalinclude:: /examples/generated/node/data-types.codeblock.query-objects-with-mixed-values.js + :language: javascript + + diff --git a/source/sdk/node/data-types/sets.txt b/source/sdk/node/data-types/sets.txt new file mode 100644 index 0000000000..5dc7b5b845 --- /dev/null +++ b/source/sdk/node/data-types/sets.txt @@ -0,0 +1,18 @@ +.. _node-data-types-sets: + +================== +Sets - Node.js SDK +================== + +.. default-domain:: mongodb + +.. contents:: On this page + :local: + :backlinks: none + :depth: 2 + :class: singlecol + +.. versionadded:: 10.5.0-beta.1 + +Overview +-------- \ No newline at end of file diff --git a/source/sdk/node/data-types/uuid.txt b/source/sdk/node/data-types/uuid.txt new file mode 100644 index 0000000000..b0a3a597ab --- /dev/null +++ b/source/sdk/node/data-types/uuid.txt @@ -0,0 +1,17 @@ +.. _node-data-types-uuid: + +================== +UUID - Node.js SDK +================== +.. default-domain:: mongodb + +.. contents:: On this page + :local: + :backlinks: none + :depth: 2 + :class: singlecol + +.. versionadded:: 10.5.0-beta.1 + +Overview +-------- \ No newline at end of file