You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Mongo/Mongoose向已有集合添加文档时为何生成test数据库?

问题描述

我在MongoDB网页控制台手动创建了名为shoppingitems的数据库,随后在Express应用中创建了products模型并完成数据库连接,shoppingitems数据库下成功生成了products集合。但当我尝试向shoppingitems.products集合添加文档时,系统却自动创建了一个名为test的新数据库,提交的文档被存入test.products集合,而非预期的shoppingitems.products。

我的代码中从未提及test数据库,附上相关代码:

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);

我是否遗漏了什么?我找不到代码中导致创建test数据库的原因,此前仅使用过一两次Mongo,希望有人能指出问题所在,我可以提供更多所需的代码或信息。


问题原因与解决方法

核心原因是你的MongoDB连接字符串(process.env.MONGO_URL)未指定目标数据库名称,Mongoose会默认使用test数据库进行操作。

解决步骤:

  1. 打开项目根目录的.env文件,检查MONGO_URL的格式,确保末尾明确指定shoppingitems数据库:
    • 云MongoDB(如Atlas)示例:
      MONGO_URL=mongodb+srv://<你的用户名>:<你的密码>@集群地址.mongodb.net/shoppingitems?retryWrites=true&w=majority
      
    • 本地MongoDB示例:
      MONGO_URL=mongodb://localhost:27017/shoppingitems
      
  2. 重启Express服务,让新的连接配置生效。

额外优化(可选):

Mongoose会自动将模型名复数化作为集合名,如果你想严格对应手动创建的products集合,可以修改模型定义,显式指定集合名:
修改models/Products.js的导出代码:

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

第三个参数即为指定的集合名称。


内容的提问来源于stack exchange,提问作者Eric Andre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:45:35