安装mongoose
npm i mongoose
创建连接
var mongoose = require("mongoose");
mongoose.set("useCreateIndex", true); // 新版本对索引的处理方式有所变化,无此代码会有警告
mongoose.connect("mongodb://localhost/test", {
useNewUrlParser: true, // 新版本对连接字符串的解析有更好的支持,无此代码会有警告
useUnifiedTopology: true, // 新版本对数据库的监事引擎有更好的支持,无此代码会有警告
});
mongoose.connection.on("open", () => {
console.log("连接已打开");
});
定义Schema和Model
Schema
组成Model
,Model
对应mongodb
中的文档
我们需要先对其进行Schema
定义,然后通过Schema
定义模型
var userSchema = new mongoose.Schema({
loginId: {
type: String,//类型
required: true,//是否必填
unique: true,//是否唯一
trim: true,//是否去除空格
minlength: 3,//最小长度
maxlength: 18,//最大长度
},
loginPwd: {
type: String,
required: true,
trim: true,
minlength: 6,
maxlength: 18,
select: false,
},
});
//定义model
let User = mongoose.model("User", userSchema);
CRUD
新增
模型.create(对象)
- 对象可以是单个对象或者是数组
- 该操作是异步的,可以使用回调函数或ES7的
await
关键字得到新增的结果 - 新增的对象会自动添加两个属性
_id
:自动生成,用于表示文档的主键,全球唯一__v
:自动生成,用于表示文档的版本,内部维护,不需要开发者处理
查询
模型.findById(id); // 根据id字符串查询单个文档,若查找不到,则返回null
模型.find(filter, [projection], [options]); // 根据条件、投影、配置 进行查询
-
filter
-
过滤条件对象
-
api
极其丰富 -
下面是一些常见
filter
写法// 查询所有 channel="财经焦点" 的新闻 { channel: "财经焦点" } // 查询所有 channel="财经焦点" 并且 title 包含 中国 的新闻 { channel: "财经焦点", title: /中国/ } // 查询所有 channel="财经焦点" 或者 title 包含 中国 的新闻 { $or: [ { channel: "财经焦点", }, { title: /中国/, }, ], } // 查询所有 发布日期 大于等于 昨天此时 的新闻 // $gt 大于 $gte 大于等于 $lt 小于 $lte 小于等于 $ne 不等于 // $in 其值在某个数组中 $nin 其值不在某个数组中 { pubDate: { $gte: Date.now() - 3600 * 24 * 1000, } }
-
-
projection
-
可选参数
-
字符串
-
表示在查询结果中进行投影(获取想要的字段)
// 仅查询_id、title、pubDate "title pubDate" // 除了 content 都要查询 "-content"
-
-
options
-
可选参数
-
对象
-
一些额外的配置
// 跳过结果中的 5 条数据,取 6 条 { skip: 5, limit: 6, } // 按照发布日期的降序排序 { sort: "-pubDate" }
-
模型.countDocument(filter); // 获取指定条件的数量
更新
模型.updateOne(filter, doc); // 更新单个文档
模型.updateMany(filter, doc); // 更新多个文档
filter
:条件,和查询中的filter
含义和用法完全一致doc
:新的文档,新文档中的属性会覆盖旧文档中的对应字段
删除
模型.deleteOne(filter); // 删除单个文档
模型.deleteMany(filter); // 删除多个文档