Search code examples
javascriptmongodbexpressmongoose

Using Mongo/Mongoose, why is an entirely new database created when adding a document to an existing collection?


https://i.sstatic.net/km7sb.jpg

I manually created a database called "shoppingitems" on the mongodb website console. I then created a model called "products" in an Express app and connected to the database. A collection called "products" was added to the "shoppingitems" database like I expected.

I then went to add a document to the "shoppingitems.products" collection, but instead an entirely new database called "test" was created, with a products collection and my submitted document in that 'test.products" collection instead of the "shoppingitems.products" collection like I intended.


Is there something wrong with my code? I make no mention of a "test" database anywhere, so IDK why it was created in the first place.

index.js

//Express
var express = require("express");
const app = express();
app.use(express.json());

//Mongoose
const dotenv = require("dotenv");
dotenv.config();
const mongoose = require("mongoose");

mongoose
  .connect(process.env.MONGO_URL, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  })
  .then(() => console.log("db connection succesfull"))
  .catch((err) => console.log(err));

//CORS
const cors = require("cors");
app.use(cors());

//Routes
const productRoute = require("./routes/products");
app.use("/", productRoute);


//RUN INDEX.JS    
app.listen(5000, () => {
  console.log("backend server is running");
});

routes/products.js

var express = require("express");
var router = express.Router();
var Product = require("../models/Products");

/* GET PRODUCTS FOR HOMEPAGE */
router.get("/", async (req, res) => {
  try {
    productList = await Product.find();
    res.json(productList);
  } catch (error) {
    console.log(error);
  }
});

//POST PRODUCTS TO DATABASE

router.post("/", async (request, response) => {
  console.log("request.body= ", request.body);
  const newProduct = new Product(request.body);
  try {
    const savedProduct = await newProduct.save();
    response.status(201).json(savedProduct);
  } catch (err) {
    response.status(500).json(err);
  }
});

module.exports = router;

models/Products.js

const mongoose = require("mongoose");

const ProductSchema = new mongoose.Schema({
  name: { type: String },
  price: { type: Number },
  description: { type: String },
  image: { type: String },
  stripeId: { type: String },
});

module.exports = mongoose.model("Product", ProductSchema);

Am I missing something? I don't see anything in the code that would be causing this and creating a "test" database. I've only used Mongo once or twice before though so I'm not exactly an expert. Can anybody here see what I'm doing wrong?

I'll post any additional code or information that you think is necessary to solving this. Just tell me what else you need to see.


Solution

  • test is the default database name used if you don't specify one. I also notice that nowhere in the code is a shoppingsitems database mentioned.

    The connection string could contain the database name, but in this code that is taken from an environment variable.