您的位置:首页 > 数据库 > Mongodb

2.关于mongodb的基础操作

2018-12-24 10:18 459 查看

一、连接mongo。

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

mongodb:// 这是固定的格式,必须要指定。

username:password@ 可选项,如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库

host1 必须的指定至少一个host, host1 是这个URI唯一要填写的。它指定了要连接服务器的地址。如果要连接复制集,请指定多个主机地址。

portX 可选的指定端口,如果不填,默认为27017

/database 如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开 test 数据库。

?options 是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开。



二、关于mongo的基础数据结构。

1.database 数据库(数据库)

    和mysql一样,一个mongod 中可以有多个数据库,默认库为db,单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

   (在mongodb中,系统默认还有三个具有特殊功能的库,分别是admin 【特殊权限,用户权限信息】,local【永远不会被复制的库,用来存储本地单台服务器的任意集合】,config【用于保存分片相关信息】)


2.collection 集合   (相当于table 表的概念)

    集合也就是类似于关系型数据库中的表格概念,集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

    (说的再通俗一些,集合就是表,文档就是row,集合就是用来存数据的)

       集合存在于数据库中,一个集合的结构可以是不固定的,也就意味着在一个集合中可以插入不同格式不同类型的数据,但是一般情况下,我们插入集合的数据,都是有一定关联性的。    下面的示例就可以提现出集合的特点。    


        db.tmp.insert({"username":"aaa","phone_num":"13333333333"})

        db.tmp.insert({"username":"bbb","phone_num":"1300000000","carr":"CMCC"})

      db.tmp.insert({"username":"ccc","phone_num": ["13000000001","13333333331","15555555555"])



3.document 文档 (传统数据库中row的概念,也就是一行记录。)

    文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别。

    例:{"username":"ccc","phone_num": ["13000000001","13333333331","15555555555"]

    档中的键/值对是有序的,而且文档中不能存在重复的key。

4.field 数据字段/域 (column)

5.index 索引

6.primary key  主键,MongoDB自动将_id字段设置为主键



三、基础操作:

创建数据库:

use testdb;   #创建一个名为testdb的数据库/切换到testdb数据库。

show dbs;  #查看当前都有哪些数据库。


集合相关操作:

show collection #查看当前数据库中所有的集合。

db.tmp.insert({"username":"ccc","phone_num": ["13000000001","13333333331","15555555555"]) 

补充!! :在mongodb3.2 版本之后,新增了两种文档的插入方式:

db.collection.insertOne():向指定集合中插入一条文档数据

db.collection.insertMany():向指定集合中插入多条文档数据



 #在db数据库中的tmp集合中插入一个文档,文档的内容是{"username":"ccc","phone_num":["13000000001","13333333331","15555555555"]

(在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。)

db.tmp.drop()  #删除名为tmp的集合。

db.tmp.find() #显示出当前集合中所有的文档。

db.tmp.find({"username":"aaa"})  #查询tmp集合中username为aaa的记录。 

#查询基本上都是通过find来完成的,find里面的参数就是查询条件(关于mongodb的查询,会在后面的文章中写到。)



更新相关操作:


db.collection.update(

   <query>,

   <update>,

   {

     upsert: <boolean>,

     multi: <boolean>,

     writeConcern: <document>

   }


query : update的查询条件,类似sql update查询内where后面的。

update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

writeConcern :可选,抛出异常的级别。


示例:

db.tmp.update({'username':'aaa'},{$set:{'phone_num':'010-11111111'})

#以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。

db.tmp.update({'username':'aaa'},{$set:{'phone_num':'010-11111111'},{multi:true}


删除文档:

删除 status 等于 A 的全部文档:


db.inventory.deleteMany({ status : "A" })

删除 status 等于 D 的一个文档:


db.inventory.deleteOne( { status: "D" } )


需要注意的是:

remove() 方法 并不会真正释放空间。


需要继续执行 db.repairDatabase() 来回收磁盘空间。








内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongodb