特点:
面向文档;
使用MongoDB传输协议作为与服务器交互的主要方式;
默认存储引擎使用了“内存映射文件”;
动态查询优化器缓存最高效的查询方式;
停止Mongod
mongod --shutdown --dbpath /mongodb_data
开机启动
@centos
vim /etc/rc.local
/usr/local/mongodb/bin/mongod --dbpath /mongodb_data --auth --logpath /data/mongodb/log.log
瞬间完成
插入/删除/更新文档均是“瞬间完成”的——即Client只关心发送数据,而不用关心Server到底是否成功存储;
瞬间完成并不是异步,而是不需要知道服务器的响应;
可以通过getLastError检查是否成功;
用户
默认情况下,shell登录没有开启安全认证;
开启安全认证:--auth 选项加上;注!开启安全认证之前要加上一个root用户。
// 绑定ip和端口
--bind_ip 127.0.0.1
--port28888
每个数据库可以有多个用户,登录认证后以超级用户的身份处理数据;
// 添加管理员
>use admin
>db.addUser("root","123456"/*密码*/);
>use test
>db.addUser("myuser","123456");
>db.addUser("myuser","123456",true/*是否是只读*/);
登录认证
>use admin
>db.auth("root","12345")
数据库
多个集合组成数据库;
不同的数据库放在不用的磁盘文件上;
数据库名应该小写,不包含空字符串和空格、.、/、\、\0
系统数据库:admin,local,config;
相关命令:
show dbs 显示所有数据库
use test 切换到test库;
show collections 显示当前库下的集合;
db.users.find() 在当前库的users集合中返回所有结果;
创建数据库:use dazaza 如果数据库dazaza不存在就会创建;
删除当前数据库
>db.dropDatabase()
集合 —— 相当于“表”
集合就是一组文档,{"key1":1,"key2":"hello"}{"key3":"hello"};
集合名称不能是空字符串,不能含有\0,不能以“system.”开头,不能包含$;
父子集合一般用.分割,如blog.posts,blog.authors;
use dazaza
show collections
db.users.find()
删除集合
>db.users.drop() // -> true/false
文档 —— 相当于“行”
<Key,Value>对有序地放置在一起就是“文档”,形如{"k1":"v1","k2":"v2"};
文档的键是有序的;
键是字符串,值是字符串/int等类型;
“_”开头的键是保留的;
区分大小写和类型;
不能有重复键;
插入文档
> db.users.insert({...})
删除文档
> db.users.remove() // 删除集合users所有文档
> db.users.remove({"name":"cacard"}) // 条件删除
查询
find({查询参数},{返回字段列表,比如name:1,age:1})
>db.xxx.find() // 返回集合xxx所有
>db.xxx.find({"a":"1","b":"2"}) // 条件查询 AND 关系
>db.users.find().count()
>db.users.find().limit(2)
>db.users.find().skip(2)
>>db.users.find().skip(2).limit(2)
>db.users.find().sort()
>db.users.find().sort('id':-1) 按id到排序
>db.users.distinct('name',{'id':{$lt:20}} select distinct (name) from users where id <20
db.test.remove({'age':{$lt:20}}) <==> elete test where age<20
lte <=
gt >
gte>=
ne !=
更新
update(query,updateObject)
更新整个文档
>db.users.update({...query...},{...new doc...})l
使用 set 更新特定字段
>db.users.update({'name':'cacard'},{'$set':{'age':'28'}},upsert=true/*有就更新,无则插入*/,multi=false)
参数依次为:查询条件/更新的字段/不存在是否插入/是否修改多条记录
修改符
$inc/$push
db.unicorns.update({name: 'Aurora'}, {$push: {loves: 'sugar'}})