Model的方法
这里,我们再在01.mongoose下新建一个js文件,命名为model。
先输入上个博客的部分代码:
const mongoose = require("mongoose");
mongoose.connect('mongodb://127.0.0.1/mongoose_test', {useNewUrlParser: true, useUnifiedTopology: true});
mongoose.connection.once("open", function () {
console.log("连接成功");
});
const {Schema} = mongoose;
const stuSchema = new Schema({
name: String,
age: Number,
//配置复杂内容,传对象
sex:{
type:String,
default:"female"
},
address: String
});
const StuModel = mongoose.model("student", stuSchema);
想直到Model的方法有哪些,可以点击这里。
进入后,左下角有个API,点击Model
然后可以看到右边显示如下:
这些就是Model的方法。
create
这里,显示的是需要的参数,有[ ]的是可写可不写的,而没加[ ]的是必须要有的。
该方法用来创建文档并添加到数据库中。
参数:
docs可以是一个文档对象(Object),也可以是一个文档对象的数组(Array)
options传入的是一个对象,要制定options,docs必须是一个数组,不能是一个文档对象
callback传入的是要给方法,操作成功调用该回调函数
然后我们再看看他的Example。
这里比起17年少了一个方法哈,我自己补充一下(上面其实也有用到,直接贴代码吧,就是一个运行成功调用的函数,传入的参数是err)。
在前面的代码的最后面加上以下代码:
StuModel.create([
{
name:"猪八戒",
age:28,
sex:"male",
address:"高老庄"
},
{
name:"唐僧",
age:16,
sex:"male",
address:"女儿国"
}
],function (err) {
if(!err){
console.log("插入成功");
}
});
执行后,可以看到,数据库中多了两行。这里就不贴图了。
这里说一下,如果你想在插入成功后查看插入的数据的话,可以将上面的代码这么用:
StuModel.create([
{
name:"猪八戒",
age:28,
sex:"male",
address:"高老庄"
},
{
name:"唐僧",
age:16,
sex:"male",
address:"女儿国"
}
],function (err) {
if(!err){
console.log(arguments);
}
});
find
这里的find其实跟mongoDB下的find差不多。
作用:用于查询所有符合条件的文档
参数:
filter 是一个文档对象或者文档对象的id,查询条件
[projection] 是一个文档对象或字符串或字符串数组 ,作用是投影
[options] 是一个文档对象,查询选项(skip, limit)
[callback] 是执行成功的回调方法,查询结果会通过函数返回,回调函数必传,如果不传,那么查询将白查
这里我们先注释掉以下代码:
// StuModel.create([
// {
// name:"猪八戒",
// age:28,
// sex:"male",
// address:"高老庄"
// },
// {
// name:"唐僧",
// age:16,
// sex:"male",
// address:"女儿国"
// }
// ],function (err) {
// if(!err){
// console.log("插入成功");
// }
// });
然后输入代码:
StuModel.find({name:"唐僧"},function (err, docs) {
if(!err){
console.log(docs);
}
});
返回数据如下:
这里我们可以看到,返回的是一个数组,因此,如果我们要想知道他的姓名的话,跟MongoDB中的用法一样,得使用索引,将刚才的代码改为:
StuModel.find({name:"唐僧"},function (err, docs) {
if(!err){
console.log(docs[0].name);
}
});
如果我们想要所有的name,不要_id的话,那么代码如下:
StuModel.find({},{name:1, _id:0},function (err, docs) {
if(!err){
console.log(docs);
}
});
可以看到,这个跟我们在MongoDB中的命令其实很像。
或者我们也可以这么用:
StuModel.find({},"name age",function (err, docs) {
if(!err){
console.log(docs);
}
});
运行结果如下:
如果我们不想要这个_id呢,我们就这样:
StuModel.find({},"name age -_id",function (err, docs) {
if(!err){
console.log(docs);
}
});
结果如下:
然后我们再试试option这个参数:
StuModel.find({},"name age -_id",{skip:3}, function (err, docs) {
if(!err){
console.log(docs);
}
});
运行结果如下:
可以看到,现在就只显示一个了。
然后我们再试试limit,代码如下:
StuModel.find({},"name age -_id",{limit:2}, function (err, docs) {
if(!err){
console.log(docs);
}
});
显示如下:
可以看到,跟我们在MongoDB下其实基本上都是一样的。
如果两个都要,用法如下:
StuModel.find({},"name age -_id",{limit:2, skip:1}, function (err, docs) {
if(!err){
console.log(docs);
}
});
update
这个有点多我就不解释了,基本上应该能看吧。
简单说就是:
filter 查询条件
doc 修改后的对象
options 配置参数
callback 回调函数
这里直接贴代码:
为了排除干扰,我们还得先把之前查询的代码给注释掉哈。
// StuModel.find({},"name age -_id",{limit:2}, function (err, docs) {
// if(!err){
// console.log(docs);
// }
// });
//修改
StuModel.update({name:"唐僧"}, {$set:{age:20}}, function (err) {
if(!err){
console.log("修改成功");
}
});
remove
这里直接贴代码吧,毕竟其实跟MongoDB的用法超级像的,这样还是得自己学会去看官网的东西。
//修改
// StuModel.update({name:"唐僧"}, {$set:{age:20}}, function (err) {
// if(!err){
// console.log("修改成功");
// }
// });
//删除
StuModel.remove({name:"白骨精"}, function (err) {
if (!err){
console.log("删除成功");
}
});
count
博主人狠话不多,直接贴代码:
//删除
// StuModel.remove({name:"白骨精"}, function (err) {
// if (!err){
// console.log("删除成功");
// }
// });
//count
StuModel.count({}, function (err, count) {
if (!err){
console.log(count);
}
});
输出结果为: