关于Nodejs中mongo文档名命名的问题,求解
关于Nodejs中mongo文档名命名的问题,求解
在我用mogoose的create创建一条数据的时候,比如说这样:temp.create();我发现我去数据库查询的时候变成了temps……这个过程会自动将其转换成小写,并添加s吗???
4 回复
在Node.js中使用Mongoose时,如果你发现插入的数据的集合名称(collection name)被自动转换为复数形式,这是Mongoose的一个默认行为。Mongoose默认将模型名转换为其对应的集合名,规则是将模型名变为复数形式。例如,模型名为Temp
,则对应的集合名会被自动设置为temps
。
示例代码
假设我们有一个用户模型(User Model),我们希望将用户数据保存到MongoDB中。
const mongoose = require('mongoose');
// 定义用户模型
const userSchema = new mongoose.Schema({
username: String,
password: String
});
// 创建模型
const User = mongoose.model('User', userSchema);
// 连接到MongoDB
mongoose.connect('mongodb://localhost/testdb', { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('Connected to MongoDB'))
.catch(err => console.error('Could not connect to MongoDB', err));
// 插入一条数据
const newUser = new User({
username: 'testUser',
password: 'testPassword'
});
newUser.save()
.then(result => console.log('User saved:', result))
.catch(err => console.error('Error saving user:', err));
在这个例子中,User
模型对应的是users
集合。如果你定义的模型名为Temp
,那么它将对应temps
集合。
如何自定义集合名称
如果你不希望Mongoose进行这种默认的复数转换,可以在定义模型时通过collection
选项指定具体的集合名称:
const userSchema = new mongoose.Schema({
username: String,
password: String
}, {
collection: 'custom_users' // 自定义集合名称
});
const User = mongoose.model('User', userSchema);
这样,即使模型名为User
,数据也会被保存到custom_users
集合中。
总结
- Mongoose默认将模型名转换为复数形式作为集合名。
- 如果需要自定义集合名,可以使用
collection
选项进行指定。 - 这种机制使得数据存储更加符合语义化和规范化,但也可能导致一些意外的情况,因此需要根据实际情况选择是否自定义集合名。
是自动加上复数的,而且还有个有意思的现象。我记得有回试着用mongoose创建一个Person集合,进了库里一看,被转成Peoples了:)。