Skip to content

Commit 0258a61

Browse files
authored
DOCSP-41059-validation-update (#685)
* DOCSP-41059-validation-update * DOCSP-41059-validation-update * DOCSP-41059-validation-update * DOCSP-41059-validation-update * DOCSP-41059-validation-update
1 parent 98718ec commit 0258a61

File tree

2 files changed

+49
-43
lines changed

2 files changed

+49
-43
lines changed
21.7 KB
Loading

source/validation.txt

Lines changed: 49 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,16 @@ To specify JSON Schema validation, use the
5151
:manual:`$jsonSchema </reference/operator/query/jsonSchema>`
5252
operator.
5353

54-
.. code-block:: json
54+
.. code-block:: javascript
5555

5656
{
5757
$jsonSchema: {
58-
required: ['customer'], // the customer field is required
58+
required: ['name', 'borough'], // the name and borough fields are required
5959
properties: {
60-
purchaseMethod: {
61-
enum: ['In Store','Online'],
62-
description: "can only be either 'In Store' or 'Online'"
63-
}
60+
cuisine: {
61+
bsonType: "string",
62+
description: "must be a string"
63+
}
6464
}
6565
}
6666
}
@@ -72,61 +72,68 @@ example:
7272
- The ``required`` array defines required fields in your document.
7373

7474
- The ``properties`` object defines rules for specific document
75-
fields.
75+
fields.
7676

7777
Consider the following example validation:
7878

79-
.. code-block:: json
79+
.. code-block:: javascript
8080

8181
{
8282
$jsonSchema: {
8383
bsonType: "object",
84-
required: [ "name", "year", "major", "gpa", "address.city", "address.street" ],
84+
required: [ "address", "borough", "name" ],
8585
properties: {
86-
name: {
87-
bsonType: "string",
88-
description: "must be a string"
86+
address: {
87+
bsonType: "object",
88+
properties: {
89+
coord: {
90+
bsonType: "array",
91+
items: [
92+
{
93+
bsonType: "double",
94+
minimum: -180,
95+
maximum: 180,
96+
exclusiveMaximum: false,
97+
description: "must be a number in [ -180, 180 ]"
98+
},
99+
{
100+
bsonType: "double",
101+
minimum: -90,
102+
maximum: 90,
103+
exclusiveMaximum: false,
104+
description: "must be a number in [ -90, 90 ]"
105+
}
106+
]
107+
}
108+
},
109+
description: "must be an object"
89110
},
90-
year: {
91-
bsonType: "int",
92-
minimum: 2017,
93-
maximum: 3017,
94-
exclusiveMaximum: false,
95-
description: "must be an integer in [ 2017, 3017 ]"
96-
},
97-
major: {
111+
borough: {
98112
bsonType: "string",
99-
enum: [ "Math", "English", "Computer Science", "History", null ],
100-
description: "can only be one of the enum values"
101-
},
102-
gpa: {
103-
bsonType: [ "double" ],
104-
minimum: 0,
105-
description: "must be a double"
113+
enum: [ "Manhattan", "Brooklyn", "Queens", "Bronx", "Staten Island" ],
114+
description: "must be one of the enum strings"
106115
}
107116
}
108117
}
109118
}
110119

120+
111121
This validation specifies:
112122

113123
- The list of
114124
:manual:`required </reference/operator/query/jsonSchema/#available-keywords>`
115125
fields.
116126

117127
- The :manual:`bsonType </reference/operator/query/jsonSchema/#available-keywords>` for
118-
all fields.
128+
all required fields.
119129

120130
- The :manual:`minimum </reference/operator/query/jsonSchema/#available-keywords>`
121131
and :manual:`maximum </reference/operator/query/jsonSchema/#available-keywords>`
122-
values for the ``year`` field.
132+
values in the ``address.coord`` array.
123133

124-
- The acceptable values for the ``major`` field, using
134+
- The acceptable values for the ``borough`` field, using
125135
:manual:`enum </reference/operator/query/jsonSchema/#available-keywords>`.
126136

127-
- The :manual:`minimum </reference/operator/query/jsonSchema/#available-keywords>`
128-
value for the ``gpa`` field.
129-
130137
For all available ``$jsonSchema`` keywords, refer to the
131138
:manual:`$jsonSchema </reference/operator/query/jsonSchema>` page in
132139
the MongoDB manual.
@@ -139,25 +146,24 @@ You can also specify validation using
139146
exception of the following query operators: :query:`$near`,
140147
:query:`$nearSphere`, :query:`$text`, and :query:`$where`.
141148

142-
.. code-block:: json
149+
.. code-block:: javascript
143150

144151
{
145152
$or: [
146-
{ phone: { $type: "string" } },
147-
{ email: { $regex: /@mongodb\.com$/ } },
148-
{ status: { $in: [ "Unknown", "Incomplete" ] } }
153+
{ name: { $type: "string" } },
154+
{ borough: {
155+
bsonType: "string",
156+
enum: [ "Manhattan", "Brooklyn", "Queens", "Bronx", "Staten Island" ],
157+
description: "must be one of the enum strings"
158+
} }
149159
]
150160
}
151161

152162
Using this validation, *one* of the following must be true:
153163

154-
- The ``phone`` field must be BSON type string,
155-
156-
- The ``email`` field must match the
157-
:manual:`regex </reference/operator/query/regex/>`
158-
``/@mongodb\.com$/``, or
164+
- The ``name`` field must be BSON type string.
165+
- The ``borough`` field must be one of the enum strings.
159166

160-
- The ``status`` field must be either ``Unknown`` or ``Incomplete``.
161167

162168
.. _validation-actions-levels:
163169

0 commit comments

Comments
 (0)