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 是降序。

posted on 2017-05-18 17:29  思此狂  阅读(424)  评论(0编辑  收藏  举报

导航