mongodb学习笔记

这个主要是自己学习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);
      });
    });
  });
};