• mongoose


    mongoose

    获取mongoose

    var mongoose = require('mongoose');

    连接mongodb

    mongoose.connect('mongodb://192.168.10.155/kang');
    var db = mongoose.connection;
    
    //也可以用下面这种形式
    var db = mongoose.createConnection('192.168.10.155','kang');

    我们需要得到在连接数据库时 成功 或者失败时的通知

    db.connection.on('error',function(err){
    console.log("数据库连接失败" + err)
    });
    db.connection.on('connected',function(){
    console.log("数据库连接成功 ... ...");
    })

    一旦连接被打开,回调将被调用。

    使用 mongoose,任何事物都是 Schema 衍生而来的。

    定义一个Schema 结构

    var PersonSchema = mongoose.Schema({       // 前面的new 可加可不加啊
      name:String,  //定义一个属性name,类型为String
      age: Number   // 定义一个属性age,类型是Number
    });

    现在我们已经定义了一个 有name,age属性的Schema,下一步我们将 Schema 编译成一个 Model(模型)

    var PersonModel = db.model('Person',PersonSchema); //mongoose.model(modelName, schema);

    模型是我们构造文档的一个类,在这种情况下,每个文档都是我们在Schema中定义的属性和行为的实例。

    var person1 = new PersonModel({
    name:"kite",
    age : 18
    })
    console.log(person1.name)

    现在我们为 PersonModel 增加一个 speak 行为(functionality,功能)。

    PersonSchema.methods.speak = function(){
      var na = this.name ? "my name is" + this.name : "i dont have name"
      console.log(na);
    }

    函数被添加到 Schema的 method 属性并且被编译成模型的属性并被暴露在每个文档实例中。

    var person1 = new PersonModel({
    name:"ooo",
    age : 18
    })
    person1.speak();
    

    数据还没有被保存到mongodb中,每一个文档(数据)都可以通过调用 save 方法保存到数据库中,回调的第一个参数是可能发生的错误。

    person1.save(function(err,person1){
      if(err) return console.log(err)
        person1.speak()
    });

    Model提供了一个create方法来对数据进行保存,

    UserModel.create({name:"pppp"},function(err,doc){
    	if(err){throw(err);}
    	console.log(doc);
    })

    文档的查找

    我们可以通过 model 模型 查找所有的数据文档

    PersonModel.find(function(err,person){
       console.log(person);
      })

    我们可以通过 属性 的值来过滤查询结果,mongoose 提供了丰富的查询机制。

     PersonModel.find({name:/^ooo/,age:18},function(err,person){
      console.log(person);
     })

    也可以指定键值来进行查询

      PersonModel.find({},['age'],function(err,person){
        console.log(person);
      })
    

    PersonModel.findOne 只返回单个文档。

       PersonModel.findOne({age: 18},function(err,person){
        console.log(person);
      })

    也可以 通过 findById 来进行查询,它只接受文件 _id 作为参数,返回单个文档

       PersonModel.findById('591d65d3b255f11c2c2abd90',function(err,person){
        console.log(person);
      })

    符合条件的文档个数

    Model.count(conditions, callback) ,返回符合文档条件的个数

      PersonModel.count({age: 18},function(err,count){
        console.log(count);
      })

    文档的删除

    Model.remove(conditions, callback); 删除符合条件的文档

       PersonModel.remove({age: 18},function(err,count){
        console.log(count);
      })

    Model.distinct(field, conditions, callback); 查询符合条件的文档并返回根据键分组的结果。

    文档的更新

    PersonModel.update 

       PersonModel.update({fname:'iiii'},{ $set: { fname: 'DDDDD',lname: 'HHHHH' }},function(err,count){
        console.log(count);
      })

    这种更新只能更新一个(符合条件的第一个);

    当查询比较复杂,查询的条件比较多的时候,还可以使用 where

    PersonModel
    .where('fname').equals('jin')
    .where('lname').equals('kang')
    .where('age').equals(20)
    .exec(function(err,res){
      console.log(res[0].fname)
    })

     使用正则的模糊查询

    exports.searchbycon = function(content,callback){ 
      var rule = new RegExp(content,'i');
      ChatModel.find({message: {$regex: rule}},function(err,per){
        if(err){
          console.log(err);
        }
        if(per){
          callback(per);
        }else{
          callback(null);
        }
      })
    
    }

     查询中常用的一些操作符

    $lt  小于     $lte 小于等于  $gt 大于  $gte  大于等于   $ne 不等于   

    $in 可单值 和多个值的匹配    $or 查询多个键值的任意给定值   $exist 是否存在  $all

    查询 name 为 test4 或者 age 为27的
    TestModel.find({"$or":[{"name":"test4"},{"age":27}]},function(error,docs){ console.log(docs) });
    查询所有存在name属性的文档
    Model.find({name: {$exists: true}},function(error,docs){ console.log(docs); });

    limit  对返回的结果的数量进行限制。如果匹配的数量不到限制数量,则返回匹配数量的结果,也就是说 limit 函数指定的是上限而不是下限

    skip  函数的功能是略过指定数量的匹配结果,返回余下的查询结果。

    sort 函数可以将查询结果数据进行排序操作,该函数的参数是一个或多个键值 对,键代表要排序的键名,值代表排序的方向

    1  是升序, -1 是降序。

  • 相关阅读:
    配置sql server 2000以允许远程访问
    SQLServer大数据量插入BULK INSERT
    【项目经理之修炼(5)】《基础篇》别把项目成功当目标(转)
    C#XML文件操作类
    winform窗体总在所有窗体最上层
    配置VSS2005的Internet访问(转)
    U盘引导盘制作
    【项目经理之修炼(4)】《基础篇》故事的主角是你吗?(转)
    SQLServer收缩数据库日志
    【项目经理之修炼(1)】《序章》关于要写给谁看的问题(转)
  • 原文地址:https://www.cnblogs.com/jkklearn/p/6874555.html
Copyright © 2020-2023  润新知