这个主要是自己学习mongoDB的一些小的笔记
##mongoDB简介
- MongoDB是一个面向文档的数据库,而不是关系型数据库(Mysql)与关系型数据库相比,文档型数据块不再有“行”(row)的概念,取而代之的是“文档”(Document)模型,主要是运用一条记录来表现复杂的层次关系 
- 没有固定的类型和大小,可以存储任意的数据类型和大小,包括很大的数据内容 
- MongoDB可以很方便的进行分片,可以采取分布式的部署方式 
- 索引:MongoDB支持通用二级索引,允许多种快速索引 
##MongoDB shell简单命令
- 数据库的查看 - show dbs
- 使用数据库 - use lab
- 显示集合 - show collections
- 显示文档,db.sessions.find() 
- 创建文档 - post = {“title” : “My Blog Post”,”content” : “Here’s my blog post”,”date” : new Date()} 
 {- "title" : "My Blog Post", "content" : "Here's my blog post" "date" : ISODate("2015-01-29T21:00:00.982Z")- } 
 //创建
 db.blog.insert(post)
 //查看
 db.blog.find()
 //查看其中一个
 db.blog.findOne()
- 更新文档 
 修改post变量,增加键”comments”- post.comments = [] 
 执行update操作,替换标题为”My Blog Post”的文章
 db.blog.update({titile : “My Blog Post”}, post)
 db.blog.find()
 {- "_id": "titile" "content" "date" "comments" : [ ]- } 
- 删除文档 - db.blog.remove({title : “My Blog Post”}) 
- 删除数据库 - drop blog 
##nodejs中使用MongoDB
var mongodb = require('./db');
function Report(name, grade, time, Report) {
  this.name = name;
  this.grade = grade;
  this.time = time;
  this.report = Report;
};
module.exports = Report;
Report.prototype.save = function save(callback) {
  // 存入 Mongodb 的report
  var report = this.report;
  var name =this.name;
  var grade=this.grade;
  var time= this.time;
  mongodb.open(function(err, db) {
    if (err) {
      return callback(err);
    }
    // 读取report
    db.collection('report', function(err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      // 若存在则更新,若不存在则增加
      collection.update({"name": name, "grade":grade, "time": time}, {$set: {"report" : report}}, {upsert:true}, function(err, report) {
        mongodb.close();
        callback(err, report);
      });
    });
  });
};
Report.get = function get(name, callback) {
  mongodb.open(function(err, db) {
    if (err) {
      return callback(err);
    }
    // 讀取 posts 集合
    db.collection('report', function(err, collection) {
      if (err) {
        mongodb.close();
        return callback(err);
      }
      // 查找 user 屬性爲 username 的文檔,如果 username 是 null 則匹配全部
      var query = {};
      if (name) {
        query.name = name;
      }
      collection.find(query).sort({time: -1}).toArray(function(err, docs) {
        mongodb.close();
        if (err) {
          callback(err, null);
        }
        // 封裝 posts 爲 Post 對象
        var reports = [];
        docs.forEach(function(doc, index) {
          var report = new Report(doc.name, doc.grade, doc.time, doc.report);
          reports.push(report);
        });
        //console.log(reports);
        callback(null, reports);
      });
    });
  });
};