Skip to content

Docsp 14569 mixed data type #1064

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
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
58 changes: 58 additions & 0 deletions examples/node/Examples/data-types.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,64 @@ const BusinessSchema = {
};
// :code-block-end:
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);
});
test("should create and read and delete an embedded object", async () => {
const realm = await Realm.open({
schema: [AddressSchema, ContactSchema],
Expand Down
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}`);
50 changes: 49 additions & 1 deletion source/sdk/node/data-types/mixed.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,52 @@ Mixed - Node.js SDK
.. 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