二、索引index
数据库中,根据一个字段的值,来寻找一个文档,是很常见的操作。比如根据学号来找一个学生。
这个学号,是唯一的,只要有学号,就能唯一确认一个学生的文档。学号这个属性,就非常适合建立索引,这样一来,查找学生就变得简单了。

这个语句,能够查看检索的过程:
1db.student.find({"name":"user888"});

学生的姓名是唯一的,为了快速的进行检索,所以就把name属性建立成为“索引”。
1db.student.createIndex({"name":1});      //1表示name从小到大排列
这样,今后通过name寻找student文档的时候,速度非常快。因为能够快速的从索引表中,找到这个文档。
缺点就是插入每条数据的时候,时间变慢了,效率低了。但是换回来的就是寻找的速度快了。

索引这个属性,所有的文档都不能相同:
1db.members.createIndex( { "user_id": 1 }, { unique: true } );
二、Mongoose
是一个将JavaScript对象与数据库产生关系的一个框架,object related model。操作对象,就是操作数据库了;对象产生了,同时也持久化了。
这个思路是Java三大框架SSH中Hibernate框架的思路。彻底改变了人们使用数据库的方式。
http://mongoosejs.com/
//引包,并不需要引用mongodb这个包
var mongoose = require('mongoose');
//链接数据库,haha是数据库名字
mongoose.connect('mongodb://localhost/haha');

//创建了一个模型。猫的模型。所有的猫,都有名字,是字符串。“类”。创建类,数据库自动创建了cats集合,
var Cat = mongoose.model('Cat', { name: String });
//实例化一只猫,实例化类对象
var kitty = new Cat({ name: 'Zildjian' });
//调用这只猫的save方法,保存这只猫,调用类的方法
kitty.save(function (err) {
  console.log('喵喵喵');
});

var tom = new Cat({"name":"汤姆"});
tom.save(function(){
    console.log('喵喵喵');
});
上面的代码中,没有一个语句是明显的操作数据库,感觉都在创建类、实例化类、调用类的方法。都在操作对象,但是数据库同步被持久了。

mongoose的哲学,就是让你用操作对象的方式操作数据库。
创建一个模型
1mongoose.model("Cat",{"name" : String , "age" : Integer}); 
就可以被实例化
1var kitty = new Cat({ name: 'Zildjian' });
然后这个实例就可以被save。

中文博客:  https://cnodejs.org/topic/51ff720b44e76d216afe34d9

mongoose首先要想明白一件事儿,所有的操作都不是对数据库进行的。所有的操作都是对类、实例进行的。但是数据库的持久化自动完成了。