MongoDB/安装/基本命令

mongoDB的存储方式是文档式存储,并不是Key-Value形式。存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。我们称这种存储形式为BSON(Binary JSON)。
模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
mongoDB中有三元素:数据库,集合,文档,其中“集合”就是对应关系数据库中的“表”,“文档”对应“行”。

安装:
下载:wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.9.tgz
解压:tar -zxvf mongodb-linux-x86_64-rhel62-3.2.9.tgz
创建目录:mv mongodb-linux-x86_64-rhel62-3.2.9 mongodb
mkdir /usr/local/mongodb/data
mkdir /usr/local/mongodb/data/db
mkdir /usr/local/mongodb/data/logs
写配置文件
touch /usr/local/mongodb/mongodb.conf

bind_ip=0.0.0   
port=27017 
#端口号
dbpath=/usr/local/mongodb/data/db
#数据目录
logpath=/usr/local/mongodb/data/logs/mongodb.log
#日志目录
fork=true 
#设置后台运行
logappend=true 
#日志输出方式
shardsvr=true
directoryperdb=true
#auth=true 
#开启认证

启动:./bin/mongod --config /usr/local/mongodb/mongodb.conf


连接:./bin/mongo
查看安装信息:db.runCommand({"buildInfo":1})

权限:
可以将 MongoDB 的用户分为两类:超级用户和数据库用户。超级用户拥有最大权限,可以对所有数据库进行任意操作,超级用户储存在 admin 数据库中,刚安装的 MongoDB 中 admin 数据库是空的。
数据库用户存储在单个数据库中,只能访问对应的数据库。另外,用户信息保存在 db.system.users 中。

关于用户和权限有以下特性:

  • 数据库是由超级用户来创建的,一个数据库可以包含多个用户,一个用户只能在一个数据库下,不同数据库中的用户可以同名
  • 如果在 admin 数据库中不存在用户,即使 mongod 启动时添加了 –auth 参数,此时不进行任何认证还是可以做任何操作
  • 在 admin 数据库创建的用户具有超级权限,可以对 MongoDB 系统内的任何数据库的数据对象进行操作
  • 特定数据库比如 test1 下的用户 test_user1,不能够访问其他数据库 test2,但是可以访问本数据库下其他用户创建的数据
  • 不同数据库中同名的用户不能够登录其他数据库。比如数据库 test1 和 test2 都有用户 test_user,以 test_user 登录 test1 后,不能够登录到 test2 进行数据库操作

创建超级用户:
userAdminAnyDatabase 权限只是针对用户管理的,对其他信息(读写数据等)是没有权限的。(root角色可以)。

use admin
db.createUser(
  {
    user: "buru",
    pwd: "12345678",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

创建数据库用户:



认证:
所有帐号都需要认证后才能操作。只能在帐号创建库下认证,才能再去其他库进行操作(哪里创建哪里认证)。



查看所有用户:

CRUD:

use myinfo

document=({"user_id" : "ABCDBWN","password" :"ABCDBWN" ,"date_of_join" :  
"15/10/2010" ,"education" :"B.C.A." , "profession" : "DEVELOPER","interest" :  
"MUSIC","community_name" :["MODERN MUSIC", "CLASSICAL  
MUSIC","WESTERN MUSIC"],"community_moder_id" : ["MR. BBB","MR. JJJ","MR  
MMM"],"community_members" : [500,200,1500],"friends_id" :  
["MMM123","NNN123","OOO123"],"ban_friends_id" :  
["BAN123","BAN456","BAN789"]});

db.userdetails.insert(document)
db.userdetails.find();
db.testtable.find({age : {$lt :24, $gt : 17}})
db.users.find({name: {$type: 2}});//根据数据类型,2表示字符串。
db.mycol.find({}).limit(1).skip(1)
db.mycol.find({}).sort({"title":-1})//1为升序,-1为降序。

db.collection.update( criteria, objNew, upsert, multi )
update()函数接受以下四个参数:

  • criteria : update的查询条件,类似sql update查询内where后面的。
  • objNew : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
db.recru.update({"name":"joe"},{$set:{"age":25}})
db.test.update( { "age" : { $gt : 20 } } , { $set : { "age_level" : "20"} },false,true );

删除表,集合,库

db.userdetails.remove( { "user_id" : "testuser" } )
db.userdetails.drop()
db.dropDatabase()

MongoDB使用 ensureIndex() 方法来创建索引:

db.mycol.ensureIndex({"title":1})//单列索引,1为指定按升序创建索引,-1为降序。
db.mycol.ensureIndex({"title":1,"description":-1})//多列索引。
db.values.ensureIndex({open: 1, close: 1}, {background: true})//在后台(非阻塞)创建索引。
db.test.ensureIndex({"userid":1},{"unique":true})//唯一索引
db.test.getIndexes()//查看索引
db.test.dropIndex({"username":1})//删除索引

聚合操作:

db.mycol.aggregate([{$group : {_id : "$owner_id", num_tutorial : {$sum : 1}}}]) //计算每个拥有者拥有的数量。

管道操作:

结果中就只还有_id,tilte和author三个字段了,默认情况下包含_id
db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
);

不包含_id
db.article.aggregate(
{ $project : {
    _id : 0 ,
    title : 1 ,
    author : 1
}});
$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
db.articles.aggregate( [
                        { $match : { score : { $gt : 70, $lte : 90 } } },
                        { $group: { _id: null, count: { $sum: 1 } } }
                       ] );

经过$skip管道操作符处理后,前五个文档被"过滤"掉。
db.article.aggregate(
    { $skip : 5 }
);

参考:
https://wizardforcel.gitbooks.io/w3school-mongodb/content/10.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容