MONGDB学习笔记

来源:互联网 发布:淘宝高达模型的黑店 编辑:程序博客网 时间:2024/05/18 03:17

一.  基本概念:
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

二.MongoDB的安装
  1. 下载mongoDB
     wget http://downloads.mongodb.org/linux/mongodb-linux-i686-2.4.9.tgz  
如果上面地址不对可以去官网自己下载http://www.mongodb.org/downloads
        解压mongoDB
     tar zxvfmongodb-linux-i686-2.4.9.tgz  
  1. 创建指定的文件夹中并将mongodb复制过去
     mkdir -p/usr/local/mongodb  
     cp -Rmongodb-linux-i686-2.4.9/* /usr/local/mongodb/  
  1. 创建数据库存放目录和日志存放文件
     mkdir -p /data/mongo/data  
     touch /data/monogo/dblogs  
  1. 启动mongod
     /usr/local/mongodb/bin/mongod--dbpath=/data/mongo/data --    logpath=/data/mongo/dblogs  --logappend  --fork  
     //--fork 是为了让程序后台执行  
  1. 设置开机自启动
echo /usr/local/mongodb/bin/mongod --dbpath=/data/mongo/data --logpath=/data/mongo/dblogs--logappend --fork >>/etc/rc.local  

关闭mongod进程:pkill mongod
 
启动命令常用参数说明:
--dbpath                        指定数据库文件存放的目录
--port                      
指定mongod服务使用的端口默认27017
--fork                      
设置mongo服务为后台运行
--logpath                  
指定log文件的目录和文件名
--logappend             
设置每次log添加在文件最后
--journal                      
启用日志
--pidfilepath                
指定进程文件的路径,如果不指定,系统将不产生进程
--maxConns               
最大并发连接数
--noprealloc                
关闭数据文件的预分配功能
--rest                       
关闭rest api功能
--nohttpinterface        
关闭web管理功能
--auth                      
指定mongo使用身份验证机制
--bind_ip                 
绑定ip


三.MongoDB的重要知识点

启动MongoDB:/usr/share/mongodb/mongodb-linux-i686-2.4.9/bin/mongod --dbpath=/data/mongo/data --logpath=/data/mongo/dblogs  --logappend  --fork      (fork:在后台运行)

MongoDB 的 Web 界面:http://localhost:28017/

"show dbs" 命令可以显示所有数据的列表
 "db" 命令可以显示当前数据库
运行"use"命令,可以连接到一个指定的数据库

>uselocal
switched to db
local
> db
local



SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引table joins 表连接,MongoDB不支持primary keyprimary key主键,MongoDB自动将_id字段设置为主键


数据库名的命名规范:

数据库名可以是满足以下条件的任意UTF-8字符串。
  • 不能是空字符串("")。
  • 不得含有' '(空格)、.、$、/、\和\0 (空字符)。
  • 应全部小写。
  • 最多64字节。
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。
  • admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。


MongoDB不正常关闭导致异常:
ERROR: child process failed, exited with error number 100
1. 删除mongod.lock文件,目录为: /data/mongo/data
2. 用repair的方式启动: /usr/share/mongodb/mongodb-linux-i686-2.4.9/bin/mongod --repair --dbpath=/data/mongo/data
3. 正常启动

四.MongoDB的常用命令:

1.  删除数据库:
db.dropDatabase()

2.  查询所有的数据库:
show dbs

3.  查询当前的数据库:
db

4. 删除数据库中的集合:
>use runoob
switched to db runoob
> show tables
site
> db.site.drop()
true
> show tables

5. 连接mongodb的客户端:
进入mongdb的斌目录,然后执行命令:   ./mongo

6.正常关闭mongodb:
use admin   db.shutdownServer()
mongod --shutdown

7.mongodb关于文档的操作:
a. 使用 insert() 或 save() 方法向集合中插入文档:       db.集合名称.insert(document).
>db.col.insert({title:'MongoDB 教程',
    description
:'MongoDB 是一个 Nosql 数据库',
   
by:'菜鸟教程',
    url
:'http://www.runoob.com',
    tags
:['mongodb','database','NoSQL'],
    likes
:100
})

b.查看已插入文档: db.集合名称.find()  ,也可以根据_id查询某条文档:
db.runoob.find(ObjectId("59e2e25753557f4869844e1a"))

c.  将数据定义为一个变量:
  document=({title:'MongoDB 教程',
    description
:'MongoDB 是一个 Nosql 数据库',
   
by:'菜鸟教程',
    url
:'http://www.runoob.com',
    tags
:['mongodb','database','NoSQL'],
    likes
:100
});
db.集合名称.insert(document)

d. 插入文档你也可以使用 save 命令,如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。

e. 修改更新文档:

db.集合名称.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}}) //只更新一条
db.集合名称.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})   //更新多条记录
指定_id,使用save方法:
db.runoob.save({
    
"_id":ObjectId("59e2e25753557f4869844e1a"),
   
"title":"MongoDB2",
   
"description":"MongoDB 是一个 Nosql 数据库2",
   
"by":"Runoob2",
   
"url":"http://www.runoob.com2",
   
"tags":[
           
"mongodb2",
           
"NoSQL2"
   
],
   
"likes":1102
})
更多修改操作:
只更新第一条记录:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
只添加第一条:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
全部添加加进去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
只更新第一条记录:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

f. 删除文档:
db.test.remove({'age':'25'})   //删除多个
db.test.remove({'age':'19'},{justOne:1})  //删除一个
db.test.remove({}) //全部删除

g. 查询文档:
一般查询: db.runoob.find({'title':'MongoDB2'}).pretty()
and 查询:  db.runoob.find({'title':'MongoDB2','by':'Runoob2'}).pretty()
or  查询: db.runoob.find({$or:[{'title':'MongoDB2'},{'by':'Runoob3'}]})
混合查询: db.col.find({"likes":{$gt:50}, $or:[{"by":"菜鸟教程"},{"title":"MongoDB 教程"}]}).pretty() 类似常规 SQL 语句为: 'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'

h. 条件操作符:
MongoDB中条件操作符有:
  • (>) 大于 - $gt
  • (<) 小于 - $lt
  • (>=) 大于等于 - $gte
  • (<= ) 小于等于 - $lte

db.col.find({"likes":{$gt:100}})  类似 Select*from colwhere likes>100;
db.col.find({likes:{$gte:100}})   类似Select*from colwhere likes>=100;
db.col.find({likes:{$lt:200, $gt :100}})  类似 Select*from colwhere likes>100 AND  likes<200;

i.排序操作:
MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列
例子:db.col.find({},{"title":1,_id:0}).sort({"likes":-1})

j.聚合操作:
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
db.col.aggregate([{$group : {_id : "$title", num_tutorial : {$sum : 1}}}])

管道: 聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理

db.col.aggregate( [
...                         { $match : { likes : { $gt : 120, $lte : 200 } } },
...                         { $group: { _id: "$title", count: { $sum: 1 } } }
...                        ] );

db.col.aggregate(
...     { $skip : 2 });

8. MongDB的复制以及恢复操作:
/usr/share/mongodb/mongodb-linux-i686-2.4.9/bin/mongodump -h 127.0.0.1 -d test -o /data/mongo/copy/${DATE}
//恢复到特定的库和集合:
/usr/share/mongodb/mongodb-linux-i686-2.4.9/bin/mongorestore --db test --collection col --drop  /data/mongo/copy/test/col.bson 

9. Mongdb的全文检索:
   a. mongod--setParameter textSearchEnabled=true   //开启全文检索,2.6版本以后默认已开启
  b.db.posts.ensureIndex({post_text:"text"})  //对post_text字段建立全文索引
  c.db.posts.runCommand("text",{search:"runoob"})  //使用全文索引搜索关键字
  d. db.posts.getIndexes()   //查找索引
  e. db.posts.dropIndex("post_text_text")  //删除索引

原创粉丝点击