mongodb详解

简介

  • 是一个基于分布式文件存储的开源数据库系统。
  • MongoDB 是一个面向文档存储的数据库

优点

  • MongoDB 在海量数据下,性能优越,mysql实际无法胜任大数据量下任意字段的查询

  • 文档结构的存储方式,能够更便捷的获取数据

  • 内置GridFS,支持大容量的存储

缺点

  • MongoDB 占用空间过大
  • 无法进行关联表查询,不适用于关系多的数据
  • 不支持事务操作

推荐客户端

RoboMongo

安装

apt-get  install mongodb
mongo -version               //查看版本

//启动和关闭
service mongodb start
service mongodb stop

//通过shell 连接mongodb服务
root@default:/home# mongo

使用

远程连接

修改配置文件

 vim /etc/mongodb.conf
 
 #修改绑定Ip:0.0.0.0  这样才能允许任何远程主机的访问
 bind_ip = 0.0.0.0
#bind_ip = 127.0.0.1

service mongodb restart //重启服务后,即可远程连接

添加登入授权

 vim /etc/mongodb.conf
 
# Turn on/off security.  Off is currently the default
#noauth = true
auth = true #去掉前面的注释


root@default:/home# mongo
。。。
 添加管理用户
> use admin
switched to db admin
> db.createUser({user:"admin",pwd:"xzw",roles:[{role:"root",db:"admin"}]})
Successfully added user: {
        "user" : "admin",
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ]
}

登入授权
> db.auth("admin","xzw")
1

service mongodb restart //重启服务后生效


//再给一个数据库添加权限
> use mydatabase
switched to db mydatabase
> db.createUser({user:"admin",pwd:"xzw",roles:[{role:"root",db:"admin"}]})
Successfully added user: {
        "user" : "admin",
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ]
}

创建/删除数据库

//创建一个数据库
> use mydatabase

//删除数据库
> db.dropDatabase()

集合

方法:

创建集合:
    name: 要创建的集合名称
    options: 可选参数, 指定有关内存大小及索引的选项
db.createCollection(name, options)  

删除集合:
db.collection.drop()

实例:

> db.createCollection("runoob")
{ "ok" : 1 }

> db.createCollection("mycol",{capped:true, autoIndexId:true,size:6142800})
{
        "note" : "the autoIndexId option is deprecated and will be removed in a future release",
        "ok" : 1
}

> db.mycol.drop()
true

> show collections
runoob

> db.createCollection("mycol",{capped:true, autoIndexId:true,size:6142800,max:10000})
{
        "note" : "the autoIndexId option is deprecated and will be removed in a future release",
        "ok" : 1
}

> show collections
mycol
runoob

文档

方法:

//插入文档 insert() 或 save() 都行
db.COLLECTION_NAME.insert(document)


//更新文档
//query : update的查询条件,类似sql update查询内where后面的。
//update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
//upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
//multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
//writeConcern :可选,抛出异常的级别。
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

//查询文档
//query :可选,使用查询操作符指定查询条件
//projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
db.collection.find(query, projection)

//删除文档
//query :(可选)删除的文档的条件。
//justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
//writeConcern :(可选)抛出异常的级别。
db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

实例:

> db.mycol.insert({tile:'学习文档', description:'测试', name:xzw})
2019-11-22T10:31:48.632+0000 E QUERY    [thread1] SyntaxError: illegal character @(shell):1:28
> db.mycol.insert({tile:'学习文档', description:'测试', name:xzw})
2019-11-22T10:32:24.647+0000 E QUERY    [thread1] ReferenceError: xzw is not defined :
@(shell):1:49
> db.mycol.insert({tile:'学习文档', description:'测试', name:'xzw',num:100})
WriteResult({ "nInserted" : 1 })
> db.mycol.find()
{ "_id" : ObjectId("5dd7b9568bca6f4ff6d1ad04"), "tile" : "学习文档", "description" : "测试", "name" : "xzw", "num" : 100 }
> db.mycol.update({name:'xzw'},{$set:{name:'wsj'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.mycol.find()
{ "_id" : ObjectId("5dd7b9568bca6f4ff6d1ad04"), "tile" : "学习文档", "description" : "测试", "name" : "wsj", "num" : 100 }
> db.mycol.find({name:'wsj'}).pretty()
{
        "_id" : ObjectId("5dd7b9568bca6f4ff6d1ad04"),
        "tile" : "学习文档",
        "description" : "测试",
        "name" : "wsj",
        "num" : 100
}

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×