Mongoose学习全面理解(推荐)

2020-06-17 06:57:26易采站长站整理

另一个更加复杂的例子,包含查询结果的排序:


User.find({'name' : 'Simon Holmes'},
null, // 如果使用null,则会返回所有的字段值
{sort : {lastLogin : -1}}, // 降序排序
function (err, users){
if (!err){console.log(users);}
});

列举几个比较实用的查找方法:


Model.find(query);
Model.findOne(query);//返回查找到的所有实例的第一个
Model.findById(ObjectID);//根据ObjectId查找到唯一实例

例如:


User.findOne({'email' : req.body.Email},
'_id name email',
function(err, user) {
//todo
});

 2.更新数据

有三种方式来更新数据:

(1)update(conditions,update,options,callback);

该方法会匹配到所查找的内容进行更新,不会返回数据;

(2)findOneAndUpdate(conditions,update,options,callback);

该方法会根据查找去更新数据库,另外也会返回查找到的并未改变的数据;

(3)findByIdAndUpdate(conditions,update,options,callback);

该方法跟上面的findOneAndUpdate方法功能一样,不过他是根据ID来查找文档并更新的。

三个方法都包含四个参数,一下稍微说明一下几个参数的意思:

conditions:查询条件
update:更新的数据对象,是一个包含键值对的对象
options:是一个声明操作类型的选项,这个参数在下面再详细介绍
callback:回调函数

对于options参数,在update方法中和findOneAndUpdate、findByIdAndUpdate两个方法中的可选设置是不同的;


//在update方法中,options的可选设置为:
{
safe:true|false, //声明是否返回错误信息,默认true
upsert:false|true, //声明如果查询不到需要更新的数据项,是否需要新插入一条记录,默认false
multi:false|true, //声明是否可以同时更新多条记录,默认false
strict:true|false //声明更新的数据中是否可以包含在schema定义之外的字段数据,默认true
}
//对于findOneAndUpdate、findByIdAndUpdate这两个方法,他们的options可选设置项为:
{
new:true|false, //声明返回的数据时更新后的该是更新前的,如果为true则返回更新后的,默认true
upsert:false|trure,
sort:javascriptObject, //如果查询返回多个文档记录,则可以进行排序,在这里是根据传入的javascript object对象进行排序
select:String //这里声明要返回的字段,值是一个字符串
}

下面举个例子:


User.update({_id:user._id},{$set: {lastLogin: Date.now()}},function(){});

3.数据删除