- 在
src
目录下新建一个文件夹models
,用来存放数据模型和操作数据库的方法。 - 在
models
目录下新建一个文件user.js
,用来管理用户信息相关的数据库操作。 - 相关的数据模型和数据库操作方法,最后通过
module.exports
暴露出去。
mongoose版本8.0.0
1-创建结构
jsx
const mongoose = require("mongoose");
const userSchema = new mongoose.Schema(
{
id: {
type: Number,
index: true,
unique: true,
},
name: String,
},
{
versionKey: false, // 设置false,存取数据就不会带版本id
}
);
2-创建模型
jsx
const User = mongoose.model("user", userSchema);
3-查增改删
查
批量查询Model.find()
jsx
Model.find(filter [, projection] [, options])
await User.find({ name: 'kaka' }, 'name phone'); // 字段前加'-'表示不返回的字段
await User.find({}, { name: 1, phone: 1 }); // 1-要返回的字段 0-不返回的字段
- filter:过滤项。
- projection:<Object|String|Array[String]>要返回的可选字段。
- options:配置项,参见Query - Mongoose 中文网 (nodejs.cn)。
可以包在函数里,最后通过
module.exports
把函数暴露出去。
jsx// 查 function FindUserList() { return User.find(); }
单个查询**Model.findOne()
**
jsx
Model.findOne([conditions] [, projection] [, options])
await User.findOne({ id: 1 }, { name: 1, id: 1 });
- conditions:查询条件。
- projection:<Object|String|Array[String]>要返回的可选字段。
- options:配置项,参见Query - Mongoose 中文网 (nodejs.cn)。
增
新增文档**Model.create()
**
jsx
Model.create(docs [, options])
await User.create({ name: 'gaga' });
await User.create([{ name: 'mama' }, { name: 'nana' }]);
- docs:<Array|Object>要插入的文档。
- options:配置项,参见Model - Mongoose 中文网 (nodejs.cn)
改
修改文档**Model.findOneAndUpdate()
**
jsx
Model.findOneAndUpdate([conditions] [, update] [, options])
const options = {
new: true,
strict: true,
};
await User.findOneAndUpdate({ id: 1 }, { id: 1, name: 'newName' }, options);
- conditions:查询条件。
- update:新的文档。
- options:配置项,参见Model - Mongoose 中文网 (nodejs.cn)
options.strict
:覆盖模式的严格模式选项(默认启用),可确保传递给模型构造函数的、结构中未指定的值不会保存到数据库中。options.upsert
:默认为false
。如果为true
,并且没有找到文档,则插入新文档。options.projection
:可选字段返回。- options.new:默认为
false
。如果为true,则返回修改后的文档,而不是原始文档。
删
删除文档**Model.findOneAndDelete()
**
jsx
Model.findOneAndDelete(conditions [, options])
await User.findOneAndDelete({ id: 1 });
- conditions:查询条件。
- options:配置项,参见Query - Mongoose 中文网 (nodejs.cn)
options.strict
:覆盖模式的严格模式选项(默认启用)。options.projection
:可选字段返回。options.session
:与此查询关联的会话,参见事务 - Mongoose 中文网 (nodejs.cn)。
完整代码
jsx
// src/models/user.js
const mongoose = require("mongoose");
const userSchema = new mongoose.Schema(
{
id: {
type: Number,
index: true,
unique: true,
},
name: String,
},
{
versionKey: false,
}
);
const User = mongoose.model("user", userSchema);
// 查-列表
function FindUserList() {
return User.find();
}
// 查
function FindUser(id) {
return User.findOne({ id });
}
// 改
function UpdateUser(id, update) {
const options = {
new: true,
strict: true,
};
return User.findOneAndUpdate({ id }, update, options);
}
// 增
function AddUser(user) {
return User.create(user);
}
// 删
function DeleteUser(id) {
return User.findOneAndDelete({ id });
}
module.exports = {
User,
FindUserList,
FindUser,
UpdateUser,
AddUser,
DeleteUser,
};