Last Sync: 2022-08-12 08:30:04
This commit is contained in:
parent
cd7199f738
commit
fdb3739410
2 changed files with 71 additions and 2 deletions
0
Databases/MongoDB/Importing_data.md
Normal file
0
Databases/MongoDB/Importing_data.md
Normal file
|
@ -20,6 +20,7 @@ We now have the following entries in our `courses` collection:
|
||||||
date: 2022-08-11T11:04:50.750Z,
|
date: 2022-08-11T11:04:50.750Z,
|
||||||
__v: 0
|
__v: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
name: 'Javascript Course',
|
name: 'Javascript Course',
|
||||||
author: 'Tosh Gnomay',
|
author: 'Tosh Gnomay',
|
||||||
|
@ -80,7 +81,6 @@ async function getCourses(){
|
||||||
.select({name: 1, tags: 1})
|
.select({name: 1, tags: 1})
|
||||||
console.log(courses)
|
console.log(courses)
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
This returns:
|
This returns:
|
||||||
|
@ -102,7 +102,7 @@ This returns:
|
||||||
|
|
||||||
> Note that the UUID is always returned, whether we specify it or not.
|
> Note that the UUID is always returned, whether we specify it or not.
|
||||||
|
|
||||||
## Filtering with operators
|
## Querying with operators
|
||||||
So far when filtering we have been doing so with reference to properties that exist on the document's model (`author`, `isPublished` etc) and we have applied tranformations on the data returned (sorting, limiting the number or matches etc.). However we can also apply **operators** within our queries. Operators allow us to perform computations on the data, for example: for a given numerical property on an object, return the objects for which this value is within a certain range.
|
So far when filtering we have been doing so with reference to properties that exist on the document's model (`author`, `isPublished` etc) and we have applied tranformations on the data returned (sorting, limiting the number or matches etc.). However we can also apply **operators** within our queries. Operators allow us to perform computations on the data, for example: for a given numerical property on an object, return the objects for which this value is within a certain range.
|
||||||
|
|
||||||
When we apply operators we use the `$` symbol before the operator and pass the operator function as an object.
|
When we apply operators we use the `$` symbol before the operator and pass the operator function as an object.
|
||||||
|
@ -140,3 +140,72 @@ To filter course prices that are either 10, 15 or 20:
|
||||||
```js
|
```js
|
||||||
Course.find(({price: {$in: [10, 15, 20] } }))
|
Course.find(({price: {$in: [10, 15, 20] } }))
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Logical operators
|
||||||
|
|
||||||
|
When we apply logical operators, we do not apply the query within the main `find` method. We use a dedicated method that corresponds to the logical predicate.
|
||||||
|
|
||||||
|
For example to query by logical [OR](/Logic/Truth-functional_connectives.md#disjunction):
|
||||||
|
|
||||||
|
```js
|
||||||
|
async function getCourses(){
|
||||||
|
const courses = await Course
|
||||||
|
.find()
|
||||||
|
.or([ { author: "Tosh Gnomay"}, {isPublished: true} ])
|
||||||
|
console.log(courses)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
We write each disjunct as an object representing the conditions we are filtering for within an array that is passed to the `.or()` method.
|
||||||
|
|
||||||
|
The same syntax applies for conjunction.
|
||||||
|
|
||||||
|
### Regular expressions
|
||||||
|
|
||||||
|
When filtering by strings we can use Regex for greater power.
|
||||||
|
|
||||||
|
Previously we filtered by the author name:
|
||||||
|
|
||||||
|
```js
|
||||||
|
.find({author: "Tosh Gnomay"})
|
||||||
|
```
|
||||||
|
To demonstrate regex we could filter by names beginning with `T`:
|
||||||
|
|
||||||
|
```js
|
||||||
|
.find({author: /^T*/})
|
||||||
|
```
|
||||||
|
|
||||||
|
```js
|
||||||
|
async function getCourses(){
|
||||||
|
const courses = await Course
|
||||||
|
.find()
|
||||||
|
.or([ { author: "Tosh Gnomay"}, {isPublished: true} ])
|
||||||
|
.count()
|
||||||
|
console.log(courses)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This will return a number.
|
||||||
|
|
||||||
|
### Pagination
|
||||||
|
|
||||||
|
We previously used the `limit()` method to control how many matches we return from a query. We can extend this functionality by creating pagination. This allows us to meter the return values into set chunks. This is used frequently when interacting with a database through a mediating RESTful API. For example to return values from endpoints such as:
|
||||||
|
|
||||||
|
```
|
||||||
|
/api/courses?pageNumber=2&pageSize=10
|
||||||
|
```
|
||||||
|
|
||||||
|
To do this you pass two values as query parameters
|
||||||
|
|
||||||
|
```js
|
||||||
|
|
||||||
|
const pageNumber = 2;
|
||||||
|
const pageSize = 10;
|
||||||
|
|
||||||
|
async function getCourses(){
|
||||||
|
const courses = await Course
|
||||||
|
.find()
|
||||||
|
.skip((pageNumber - 1 * pageSize))
|
||||||
|
.limit(pageSize)
|
||||||
|
console.log(courses)
|
||||||
|
}
|
||||||
|
```
|
Loading…
Add table
Reference in a new issue