Skip to content

(DOCSP-14569): mixed data type #1057

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions examples/node/Examples/data-types.js
Original file line number Diff line number Diff line change
@@ -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);
});
});
});
Original file line number Diff line number Diff line change
@@ -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,
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const DogSchema = {
name: "Dog",
properties: {
name: "string",
birthDate: "mixed",
},
};
Original file line number Diff line number Diff line change
@@ -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}`);
1 change: 1 addition & 0 deletions source/sdk/node.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ MongoDB Realm Node.js SDK
Quick Start </sdk/node/quick-start-local>
Quick Start with Sync </sdk/node/quick-start>
Fundamentals </sdk/node/fundamentals>
Data Types </sdk/node/data-types>
Usage Examples </sdk/node/examples>
Integration Guides </sdk/node/integrations>
Advanced Guides </sdk/node/advanced>
Expand Down
29 changes: 29 additions & 0 deletions source/sdk/node/data-types.txt
Original file line number Diff line number Diff line change
@@ -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 </sdk/node/data-types/field-types>
Collections </sdk/node/data-types/collections>
Dictionaries </sdk/node/data-types/dictionaries>
Sets </sdk/node/data-types/sets>
Mixed </sdk/node/data-types/mixed>
UUID </sdk/node/data-types/uuid>
Embedded Objects </sdk/node/data-types/embedded-objects>

- :doc:`Field Types </sdk/node/data-types/field-types>`
- :doc:`Collections </sdk/node/data-types/collections>`
- :doc:`Dictionaries </sdk/node/data-types/dictionaries>`
- :doc:`Sets </sdk/node/data-types/sets>`
- :doc:`Mixed </sdk/node/data-types/mixed>`
- :doc:`UUID </sdk/node/data-types/uuid>`
- :doc:`Embedded Objects </sdk/node/data-types/embedded-objects>`
16 changes: 16 additions & 0 deletions source/sdk/node/data-types/collections.txt
Original file line number Diff line number Diff line change
@@ -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
--------
18 changes: 18 additions & 0 deletions source/sdk/node/data-types/dictionaries.txt
Original file line number Diff line number Diff line change
@@ -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
--------
13 changes: 13 additions & 0 deletions source/sdk/node/data-types/embedded-objects.txt
Original file line number Diff line number Diff line change
@@ -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
16 changes: 16 additions & 0 deletions source/sdk/node/data-types/field-types.txt
Original file line number Diff line number Diff line change
@@ -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:
65 changes: 65 additions & 0 deletions source/sdk/node/data-types/mixed.txt
Original file line number Diff line number Diff line change
@@ -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
<node-define-a-realm-object-schema>` 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()
<Realm.html#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() <Realm.Collection.html#filtered>` method and
passing in a :ref:`filter <node-filter-queries>` 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


18 changes: 18 additions & 0 deletions source/sdk/node/data-types/sets.txt
Original file line number Diff line number Diff line change
@@ -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
--------
17 changes: 17 additions & 0 deletions source/sdk/node/data-types/uuid.txt
Original file line number Diff line number Diff line change
@@ -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
--------