猫鼬怎么知道我要访问什么集合?

时间:2020-09-13 21:00:05

标签: node.js mongodb mongoose

我很难理解猫鼬的概念。

我正在使用MongoDB地图集,有一个集群,一个数据库和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;
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;
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;

一个用于处理数据库连接的文件。另一个作为用户架构的文件,另一个用于处理我可能全局使用的每个功能的文件...

我无法确定的一件事是

findOne()函数如何能够定位我正在使用的集合,而无需告诉我要搜索哪个集合?

是否以某种方式翻译了

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

行并搜索“用户”?我只是不明白这背后的魔力...

如果我要专门搜索字符集中的内容...?

1 个答案:

答案 0 :(得分:2)

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

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