mongoose常用方法

查询

find()

Model.find(conditions, [fields], [options], [callback])

第一个参数表示查询条件,第二个参数用于控制返回的字段,第三个参数用于配置查询参数,第四个参数是回调函数,回调函数的形式为function(err,docs){}

例子1:
查询用户表下面名字为张三的。忽略7条,并只显示2条,按时姓名、性别、居住地址、创建时间信息并按创建时间倒叙显示


userModel.find({
    
    'name':'张三'},{
    
    'name':1,'sex':1,'region':1,'createBy':1,'_id':0}).skip(7).limit(2).sort({
    
    'createBy.createTime' : -1})

在这里插入图片描述
例子2:
找出年龄大于18且名字里存在’huo’的数据

 temp.find({
    
    name:/huo/,age:{
    
    $gte:18}},function(err,docs){
    
    
            //[ { _id: 5971f93be6f98ec60e3dc86c, name: 'huochai', age: 27 },
            //{ _id: 5971f93be6f98ec60e3dc86e, name: 'huo', age: 30 }]
            console.log(docs);
        })

findById()

Model.findById(conditions, [fields], [options], [callback])

注:conditions写一个id值就可以了,返回单个文档

findOne()

Model.find(conditions, [fields], [options], [callback])

注:与 Model.find 相同,但只返回符合条件的第一个文档

where

当查询比较复杂时,用 where:

Model
.where('age').gte(25)
.where('tags').in(['movie', 'music', 'art'])
.select('name', 'age', 'tags')
.skip(20)
.limit(10)
.asc('age')
.slaveOk()
.hint({
    
     age: 1, name: 1 })
.run(callback);

查询非空字段

Model.find(conditions:{
    
    $exists:true})
Model.find(conditions:{
    
    $ne:null})

分页查询

Model.find(conditions).skip(pageTotal * pageNum).limit(pageTotal).sort({
    
    '_id':-1}).exec(cb);

注:condition 查询条件、pageTotal为每页显示条数、pageNum为分页数量、cb为回调函数

模糊查询

userModel.find({
    
    "name" : {
    
    $regex:'大虾'}})
userModel.find({
    
    "name" : /大虾/ }})

修改

update

Model.update(conditions, doc, [options], [callback])

注:第一个参数conditions为查询条件,第二个参数doc为需要修改的数据,第三个参数options为控制选项,第四个参数是回调函数

修改选项中的信息

safe (boolean): 默认为true。安全模式。
  upsert (boolean): 默认为false。如果不存在则创建新记录。
  multi (boolean): 默认为false。是否更新多个查询记录。
  runValidators: 如果值为true,执行Validation验证。
  setDefaultsOnInsert: 如果upsert选项为true,在新建时插入文档定义的默认值。
  strict (boolean): 以strict模式进行更新。
  overwrite (boolean): 默认为false。禁用update-only模式,允许覆盖记录。

例子1:
现在使用update()方法查询age大于20的数据,并将其年龄更改为40岁

 temp.update({
    
    age:{
    
    $gte:20}},{
    
    age:40},function(err,raw){
    
    
            //{ n: 1, nModified: 1, ok: 1 }
            console.log(raw);
        })

例子2:
如果要同时更新多个记录,需要设置options里的multi为true。

 temp.update({
    
    name:/a/},{
    
    age: 10},{
    
    multi:true},function(err,raw){
    
    
            //{ n: 2, nModified: 2, ok: 1 }
            console.log(raw);
        })

例子3:
如果设置的查找条件,数据库里的数据并不满足,默认什么事都不发生

temp.update({
    
    age:100},{
    
    name: "hundred"},function(err,raw){
    
    
    //{ n: 0, nModified: 0, ok: 1 }
    console.log(raw);
})

例子4:
如果设置options里的upsert参数为true,若没有符合查询条件的文档,mongo将会综合第一第二个参数向集合插入一个新的文档

temp.update({
    
    age:100},{
    
    name: "hundred"},{
    
    upsert:true},function(err,raw){
    
    
    //{ n: 1, nModified: 0,upserted: [ { index: 0, _id: 5972c202d46b621fca7fc8c7 } ], ok: 1 }
    console.log(raw);
})

在这里插入图片描述

updateMany()

Model.updateMany(conditions, doc, [options], [callback])

注:updateMany()与update()方法唯一的区别就是默认更新多个文档,即使设置{multi:false}也无法只更新第一个文档

updateOne()

temp.updateOne({
    
    name:/huo/},{
    
    age:60},function(err,raw){
    
    
    //{ n: 1, nModified: 1, ok: 1 }
    console.log(raw);
});

注:updateOne()方法只能更新找到的第一条数据,即使设置{multi:true}也无法同时更新多个文档

删除

remove()

model.remove(conditions, [callback])

注:该方法的第一个参数conditions为查询条件,第二个参数回调函数的形式如下function(err){},回调函数不能省略(一次可以删多个)

例子1:
删除数据库中名称包括’30’的数据

temp.remove({
    
    name:/30/},function(err){
    
    })

findOneAndRemove()

Model.findOneAndRemove(conditions, [options], [callback])

注:删除第一个符合条件的选项

findByIdAndRemove()

Model.findByIdAndRemove(id, [options], [callback])

顾名思义~,无需多言

查询条件

$or    或关系
$nor    或关系取反
$gt    大于
$gte    大于等于
$lt    小于
$lte    小于等于
$ne    不等于
$in    在多个值范围内
$nin    不在多个值范围内
$all    匹配数组中多个值
$regex   正则,用于模糊查询
$size   匹配数组大小
$maxDistance 范围查询,距离(基于LBS)
$mod    取模运算
$near    邻域查询,查询附近的位置(基于LBS)
$exists   字段是否存在
$elemMatch 匹配内数组内的元素
$within   范围查询(基于LBS)
$box     范围查询,矩形范围(基于LBS)
$center   范围醒询,圆形范围(基于LBS)
$centerSphere 范围查询,球形范围(基于LBS)
$slice    查询字段集合中的元素(比如从第几个之后,第N到第M个元素

细节操作看着~

帮助文档
如果帮到你了~点赞+收藏

猜你喜欢

转载自blog.csdn.net/CSDNzhaojiale/article/details/108663057
今日推荐