# Debug

## NoSQL Database

Attach a shell to the running mongoDB container:

```
docker exec -it mongo-auditforge /bin/sh
```

Then connect to the database:

```
mongo mongodb://127.0.0.1/auditforge
```

To list collections as described in [Data](data) you can use one of the following
commands from the DB shell:

- `show collections`
- `db.getCollectionNames()`
- `show tables`

For example:

```
> show collections
audits
audittypes
clients
companies
customfields
customsections
images
languages
templates
users
vulnerabilities
vulnerabilitycategories
vulnerabilitytypes
```

Then you can inspect the entries of each collection:

```
> db.<collection>.find()
```

Example for `users`:

```
> db.users.find()
{ "_id" : ObjectId("REDACTED"), "role" : "admin", "username" : "demo", "password" : "REDACTED", "firstname" : "demo", "lastname" : "demo", "createdAt" : ISODate("2020-08-21T15:45:18.999Z"), "updatedAt" : ISODate("2020-09-21T14:45:18.999Z"), "__v" : 0 }
...
```

You can access a specific entry using an array index, eg for a specific audit:

```
> db.audits.find()[1]
```

Of course you can continue to nest attributes/nodes, eg:

```
> db.audits.find()[1].findings[0].references[0]
```

Then you can use [db.collection.find](https://docs.mongodb.com/manual/reference/method/db.collection.find/) shell method
to query specific objects:

```
> db.users.find( { username: "demo" } )
```

It is possible to [filter the output](https://docs.mongodb.com/compass/current/query/project/):

```
> db.users.find( { role: "admin" }, {_id: 1} )
```

For example to get a synthetic view of custom fields:

```
> db.customfields.find( {}, {_id: 0, updatedAt: 0, size: 0, position: 0, createdAt: 0, __v: 0, offset: 0})
> db.customfields.find( {}, {label: 1, fieldType: 1, description: 1, display: 1, displaySub: 1, required: 1, _id: 0})
{ "displaySub" : "", "required" : true, "description" : "", "fieldType" : "input", "label" : "VulnID", "display" : "vulnerability" }
{ "displaySub" : "Orga", "required" : true, "description" : "", "fieldType" : "input", "label" : "RefID", "display" : "vulnerability" }
```