MongoDB - NoSQL数据库

ObjectId(xx): 4 字节的时间戳(单位:秒) + 5 个字节的进程唯一标识 + 3 个字节自增数

身份验证,数据丢失,对安全问题响应很慢,不能涉及到记录中间存在关系
使用bson,其优点是解释快。
面向文档(多个键有序放置),类似于关系型数据库中的行
每个文档有一个特殊的键"_id", 在集合中是唯一的
集合类似于没有模式(意味着里面的文档可以是各式各样)的表
一个MongoDB可以容纳多个数据库(类似IndexDB)

MongoDB的ODM(对象数据库管理器) —— mongoose (有模式功能)来做数据库管理

MongoDB 在1.8版本之后开始支持 journal,就是我们常说的 redo log,用于故障恢复和持久化。
当系统启动时,MongoDB 会将数据文件映射到一块内存区域,称之为Shared view,在不开启 journal 的系统中,数据直接写入shared view,然后返回,系统每60s刷新这块内存到磁盘,这样,如果断电或down机,就会丢失很多内存中未持久化的数据。
当系统开启了 journal 功能,系统会再映射一块内存区域供 journal 使用,称之为 private view,MongoDB 默认每100ms刷新 privateView 到 journal,也就是说,断电或宕机,有可能丢失这100ms数据,一般都是可以忍受的,如果不能忍受,那就用程序写log吧(但开启journal后使用的虚拟内存是之前的两倍)。

Javascript shell(mongo,启动用mongod,每次)(CRUD操作)
启动mongodb用--rest启动web界面

blog.posts子集合,父集合根本不存在,其他工具也有这个定义
数据库包含多个集合,一个集合包含多个文档,一个文档包含多个键

新建/切换数据库use name,集合没有新建操作,直接使用
show dbs,show collections

当集合名不是数据库对象的属性时可以用getCollection方法,dropCollection删除集合,dropDatebase删除数据库

数据库引用$ref

插入文档到集合用insert,find查看文档,update更新文档,remove删除文档。
可以使用修改器$inc增加键的值(数字), $set设置或更新, $unset删除, $push向数组添加元素, $ne不存在值时update, $addToSet添加不重复的值, $each 操作多个值, $pop从指定位置删除数组元素, $pull删除所有匹配值,$引用匹配的值

upset(update第三个参数为true)没有文档符合更新条件时会创建新的文档

.save在文档不存在时插入集合,存在时更新

.runCommand({getLastError:1})查看最后一次操作

聚合工具:count,distinct,group,MapReduce

GridFS存储文件,system.js中存储js代码

在NodeJS下安装mongodb模块操作mongodb
var mongodb = require('mongodb');
var server = new mongodb.Server('localhost', 27017, {auto_reconnect:true});
var db = new mongodb.Db('mydb', server, {safe:true});
db.open(function(err, db){console.log(err)})
db.createCollection('mycoll', {safe:true}, function(err, collection){})