我很难理解猫鼬的概念。
我正在使用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);
行并搜索“用户”?我只是不明白这背后的魔力...
如果我要专门搜索字符集中的内容...?
答案 0 :(得分:2)
猫鼬使用模型名称,该名称是在创建时传递的:mongoose.model("User", UserSchema)
,转换为小写并附加了's'。
对于模型User
,默认情况下使用集合users
。您可以通过在架构中明确指定集合名称来更改此设置。