# MongoDB and MongoExpress in Docker
## Write `docker-compose-mongo.yaml` file
```yaml
version: '3' # version of docker-compose
services:
mongodb:
image: mongo
ports:
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=password
volumes:
- mongo-data:/data/db
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=admin
- ME_CONFIG_MONGODB_ADMINPASSWORD=password
- ME_CONFIG_MONGODB_SERVER=mongodb
volumes:
mongo-data:
driver: local
```
if you want to store data in your local path
you can change the content like below
```yml
version: '3' # version of docker-compose
services:
mongodb:
image: mongo
ports:
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=password
volumes:
- /{your-path}:/data/db
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=admin
- ME_CONFIG_MONGODB_ADMINPASSWORD=password
- ME_CONFIG_MONGODB_SERVER=mongodb
```
## Run Command
```bash
docker compose -f docker-compose-mongo.yaml up -d
```
## Open the browser `http://localhost:8081`

## Using `mongoose` in js
### Install Package
```bash
$ npm i mongoose
```
### Write test js
- Note: you need to create a database and create a user and grant permisson for that user if you want use other users.
```javascript
//Import the mongoose module
var mongoose = require("mongoose");
async function main() {
//Set up default mongoose connection
var mongoDB = "mongodb://admin:password@127.0.0.1:27017/db?authSource=admin";
mongoose.connect(mongoDB);
// Get Mongoose to use the global promise library
mongoose.Promise = global.Promise;
//Get the default connection
var db = mongoose.connection;
var data = await db.collection("students").insertOne({ name: "John" });
console.log(data);
//Bind connection to error event (to get notification of connection errors)
// db.on("error", console.error.bind(console, "MongoDB connection error:"));
}
main();
```
You can also use these code below
```javascript
//Import the mongoose module
var mongoose = require("mongoose");
async function main() {
//Set up default mongoose connection
// var mongoDB = "mongodb://admin:password@127.0.0.1:27017/db?authSource=admin";
var mongoDB = "mongodb://admin:password@127.0.0.1:27017";
var dbName = "db";
mongoose.connect(mongoDB);
// Get Mongoose to use the global promise library
mongoose.Promise = global.Promise;
//Get the default connection
var db = mongoose.connection.useDb(dbName);
var data = await db.collection("students").insertOne({ name: "Adem2" });
console.log(data);
//Bind connection to error event (to get notification of connection errors)
// db.on("error", console.error.bind(console, "MongoDB connection error:"));
}
main();
```