猫鼬如何知道我正在访问哪个集合?

Lia*_*ren 2 mongoose mongodb node.js

我在理解 Mongoose 的概念时遇到了困难。

我正在使用 MongoDB atlas,有一个集群、一个数据库和 2 个集合。

用户、角色。

通过指南,我了解到编写内容的一个好方法是将模型(我使用命名模式)作为文件,将其导入到数据库模块/类中

并用它来执行查询...

const mongoose = require("mongoose");
const process = require("./config.env");

db = () => {
  return mongoose
    .connect(process.env.URI, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
      useFindAndModify: true,
    })
    .then((response) => {
      console.log(`Connected to Databse : ${response.connection.host}`);
    })
    .catch((err) => {
      console.log("DB_ERROR:", err);
      process.exit(1);
    });
};

module.exports = db;
Run Code Online (Sandbox Code Playgroud)
const mongoose = require("mongoose");

const UserSchema = new mongoose.Schema({
  username: {
    type: String,
    required: true,
  },
  password: {
    type: String,
    required: true,
  },
  email: {
    type: String,
    required: true,
  },
});

const User = mongoose.model("User", UserSchema);

module.exports = User;
Run Code Online (Sandbox Code Playgroud)
const User = require("../schemas/User");
const db = require("../config/db");
class Database {
  constructor(db, collection) {
    this.db = db;
    this.collection = collection;
    this.User = User;
  }

  connect() {
    return db();
  }
}

module.exports = Database;
Run Code Online (Sandbox Code Playgroud)

一个文件用于处理数据库连接。另一个文件作为用户模式,第三个文件用于处理我可能在全局使用的每个函数...

我无法全神贯注的一件事是

findOne() 函数如何能够找到我正在使用的集合,而无需我告诉它我希望它在哪个集合中搜索?

是不是以某种方式翻译了

const User = mongoose.model("User", UserSchema);
Run Code Online (Sandbox Code Playgroud)

线并搜索“用户”?我只是无法理解这背后的魔力......

如果我想在角色集合中专门搜索怎么办...?

Joe*_*Joe 8

Mongoose 使用创建时传递的模型名称:mongoose.model("User", UserSchema),转换为小写并附加 's'。

对于模型,它默认User使用集合。users您可以通过在架构中显式指定集合名称来更改此设置。