Basic operations every nodejs/mongoose developer should know
Tags: mongodb, beginners, typescript, node
Published: 2022-07-14 18:16:00

#### insert document

```typescript
const cap = {
color: Yellow,
size: 'G',
brand: Nike
}

const capDb = await Cap.create(cap)

// capDb = { _id: objectId(''), color: Yellow,size: G, brand:Nike }

```

#### remove document

```typescript
const cap = {
color: Yellow,
size: 'G',
brand: Nike,
_id: '123'
}

const capRemoved = await Cap.findByIdAndDelete(cap._id)

// capRemoved = { _id: objectId(''), color: Yellow,size: G, brand:Nike }

```

#### Find specific document

```typescript
const cap = {
color: Yellow,
size: 'G',
brand: Nike,
_id: '123'
}

const capDb = await Cap.findById(cap._id)

// capDb = { _id: objectId(''), color: Yellow,size: G, brand:Nike }

// or 

const capDb = await Cap.findOne({color: Yellow, size: 'G'})

// capDb = { _id: objectId(''), color: Yellow,size: G, brand:Nike }

// note: findOne will return the first document that matches the filter specified if an _id is not provided
```

#### Filter documents

```typescript
// find only Yellow caps from the 'Nike' brand and model 'Special'

interface cap {
brand: string
color: string
size: string
model: string
}

const caps = await Cap.find({color: 'Yellow' brand: 'Nike', model: 'Special'})
```

#### Filter documents matching array fields

```typescript
// find the games which has 'PS5' platform

interface game {
genre: string
title: string
platforms: string[]
}

const gamesDb = [
{_id: '1', genre: adventure, title: 'God of War', platforms: ['PS3', 'PS4', 'PS5']},

{_id: '2', genre: adventure, title: 'Demon souls remake', platforms: ['PS5']},

{_id: '2', genre: adventure, title: 'GTA IV', platforms: ['PS3']},

{_id: '2', genre: adventure, title: 'Forza horizon', platforms: ['XBOX 360', 'XBOX ONE']}


]


const games = await Game.find({platforms: 'PS5'})

/* games = [
{_id: '1', genre: adventure, title: 'God of War', platforms: ['PS3', 'PS4', 'PS5']},

{_id: '2', genre: adventure, title: 'Demon souls remake', platforms: ['PS5']},
]
*/

```


#### Filter documents matching array fields

```typescript

// find the games which has 'PS5' and 'PS3' platform

interface game {
genre: string
title: string
platforms: string[]
}

const gamesDb = [
{_id: '1', genre: adventure, title: 'God of War', platforms: ['PS3', 'PS4', 'PS5']},

{_id: '2', genre: adventure, title: 'Demon souls remake', platforms: ['PS5']},

{_id: '2', genre: adventure, title: 'GTA IV', platforms: ['PS3']},

{_id: '2', genre: adventure, title: 'Forza horizon', platforms: ['XBOX 360', 'XBOX ONE']}

]

const games = await Game.find({platforms: {$in: ['PS3','PS5']})


/*games = [
{_id: '1', genre: adventure, title: 'God of War', platforms: ['PS3', 'PS4', 'PS5']},

{_id: '2', genre: adventure, title: 'GTA IV', platforms: ['PS3']}
]

*/
```

#### Update object prop in array of objects field in document

```typescript

// update a document where the monster arm size is 700 and set to 30 and tattoo to true

interface monster {
arms: [{size: number, tattoo: boolean, side: string}]
}

const monster = {
_id: '1',
arm: {
size: 700,
tattoo: false,
side: 'left'
}

const monsterUpdated = await Monster.findOneAndUpdate(
{'arms.side': 'left'}, 
{'arms.$.size': 30, 'arms.$.tattoo': true}, 
{new: true} 
)


/* monsterUpdated = {
_id: '1',
arms: [{
size: 30,
tattoo: true,
side: 'left'
}]
*/
```