Skip to content

Commit

Permalink
Docsp 14569 mixed data type (#1064)
Browse files Browse the repository at this point in the history
* attempt to add bluehawked mixed example snippets

* fixed wording

* Update source/examples/generated/node/data-types.codeblock.query-objects-with-mixed-values.js

* Update examples/node/Examples/data-types.js

Co-authored-by: Mohammad Hunan Chughtai <[email protected]>
  • Loading branch information
Mohammad Hunan Chughtai and Mohammad Hunan Chughtai authored May 11, 2021
1 parent b79ffbc commit 2475974
Show file tree
Hide file tree
Showing 5 changed files with 138 additions and 1 deletion.
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


0 comments on commit 2475974

Please sign in to comment.