MongoDB 基础了解(三)

导读:本篇文章讲解 MongoDB 基础了解(三),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

一、MongoDB 集合操作

1.创建集合

2.查看集合

3.删除集合

二、MongoDB 文档操作

1.插入文档

1.单条插入

2.批量插入

2.更新文档

3.文档查询

1.AND 条件

2.OR 条件

3.AND 和 OR 联合

4.排序

5.总条数

6.去重

7.指定返回字段

4.删除文档

二、MongoDB 数据备份与恢复

1.数据备份

2.数据恢复


一、MongoDB 集合操作

MongoDB中的集合是一组文档的集,相当于关系型数据库中的表。

1.创建集合

MongoDB使用 db.createCollection()函数来创建集合。

语法格式:db.createCollection(name,options)。

name:要创建的集合名称。

options:可选参数,指定有关内存大小及索引的选项。

MongoDB 基础了解(三)

创建一个默认选项的集合 c1 命令如下:

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

# 这个命令创建的表可以查看到
> show tables
c1
system.users
system.version

提示:其实在MongoDB中创建文档时会自动创建集合,除非你对创建的集合有特殊的需求。

#方式一: 
> db.c2.insert({"a":1})    #当第一个文档插入时,集合就会被创建并包含该文档 

#方式二:
> db.c3    #创建一个空集合,里面没有数据时,通过 show tables 或 show collections 是无法查看到的。需要向集合中插入一个文档才能看见。

2.查看集合

通过 show tables 或 show collections 查看所有集合。

通过 db.COLLECTION_NAME.stats() 查看集合详情。

3.删除集合

通过 db.COLLECTION_NAME.drop()删除集合。

> db.c1.drop()
true
> show tables
c2
c4
system.users
system.version

二、MongoDB 文档操作

1.插入文档

1.单条插入

可以使用 insert/insertone/save 插入单条文档:

  • db.c1.insert((“name”:”a”))
  • db.c1.insertOne({“name”:”a”})
  • db.c1.save((“name”:”a”})

(1)insert:

通过 db.COLLECTION_NAME.insert(document)插入文档。

插入文档时如果没有指定_id 则默认为 ObjectId类型,_id不能重复,且在插入后不可变。

> user1 ={
...     "name":"zhangsan",
...     "age":18,
...     "hobbies":["music", "read"],
...     "addr":{
...         "country":"China",
...         "city":"BJ"
...     }
... }
> db.user.insert(user1)

(2)insterOne

在MongoDB 3.2版本以后,提供了 insertOne()函数用于插入单条文档。

# 指定了 id
> user2 ={
...     "_id":"2",
...     "name":"lisi",
...     "age":20,
...     "hobbies":["music", "read"],
...     "addr":{
...         "country":"China",
...         "city":"SH"
...     }
... }

> db.user.insertOne(user2)
{ "acknowledged" : true, "insertedId" : "2" }

(3)save

插入文档也可以使用 db.COLLECTION_NAME.save(document) 命令。

如果不指定_id字段 save()方法等同于insert()方法,随机生成。如果指定存在的_id字段,则变为更新文档的操作。 

2.批量插入

        可以使用 insert/insertMany/save 插入多条文档。区别在于把单条插入时函数参数的对象类型{} 变成数组类型 [ {},{} ] :

  • db.c1.insert([{name:”a”}, {name:”b”}])
  • db.c1.insertMany([{name:”a”}, {name:”b”}])
  • db.c1.save([{name:”a”}, {name:”b”}])
> user3 ={
...     "_id":"3",
...     "name":"qq",
...     "age":20,
...     "hobbies":["music", "read"],
...     "addr":{
...         "country":"China",
...         "city":"SH"
...     }
... }

> user4 ={
...     "_id":"4",
...     "name":"li",
...     "age":20,
...     "hobbies":["music", "read"],
...     "addr":{
...         "country":"China",
...         "city":"SH"
...     }
... }

> user5 ={
...     "_id":"5",
...     "name":"li9",
...     "age":20,
...     "hobbies":["music", "read"],
...     "addr":{
...         "country":"China",
...         "city":"SH"
...     }
... }

> db.user.insert([user3,user4,user5])
BulkWriteResult({
	"writeErrors" : [ ],
	"writeConcernErrors" : [ ],
	"nInserted" : 3,
	"nUpserted" : 0,
	"nMatched" : 0,
	"nModified" : 0,
	"nRemoved" : 0,
	"upserted" : [ ]
})

2.更新文档

        通过 update 系列函数或者 save 函数可以更新集合中的文档,我们来详细看下 update 函数的使用,上一节已经介绍过 save 函数。

        update()函数用于更新已存在的文档。语法格式如下:

db.COLLECTION_NAME.update(query, update, {upsert,multi}) 
  • query:update 的查询条件,类似SQL update 语句中的where部分。
  • update:update的对象和一些更新的操作符(如$,$inc…)等,也可以理解为SQL update 语句中的set 部分。
  • upsert:可选,如果不存在 update 的文档,是否插入该文档,true为插入,默认是false,不插入。
  • multi:可选,是否批量更新。true表示按条件查询出来的多条记录全部更新,false只更新找到的第一条记录,默认是 false。 
user = {
    "name":"wangwu",
    "age":20,
    "hobbies":["music","read"],
    "addr":{
        "country":"China",
        "city":"BJ"
    }
}

#修改单条
db.user.update({"name":"lisi"},user)    #这个更新是将符合条件的全部更新成后面的文档,相当于先删除在更新
db.user.update({"name":"list"},{$set:{name:"mingming"}}) #保留原来数据更新,但是只更新符合条件的第一条数据

db.集合名称.update({name:"小黑"},{$set:{name:"小明"}},{multi:true})
#保留原来数据更新,更新符合条件的所有数据

db.集合名称.update({name:"小黑"},{$set:{name:"小明"}},{multi:true,upsert:true})
保留原来数据更新,更新符合条件的所有数据没有条件符合时插入数据

注意:更新文档是更新整个文档的操作,如果修改的值只有name和age,除了_id以外其他属性将会被删除。

3.文档查询

MongoDB查询文档使用 find() 方法。find() 方法以非结构化的方式来显示所有文档。 语法 :

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

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

> db.集合名称.find().pretty()

注意:pretty() 方法以格式化的方式来显示所有文档。

# 创建表并插入文档
> for(let i=0;i<10;i++){ db.users.insert({name:'sky_'+i,age:24,_id:i})}
> db.users.find()
{ "_id" : 0, "name" : "sky_0", "age" : 24 }
{ "_id" : 1, "name" : "sky_1", "age" : 24 }
{ "_id" : 2, "name" : "sky_2", "age" : 24 }
{ "_id" : 3, "name" : "sky_3", "age" : 24 }
{ "_id" : 4, "name" : "sky_4", "age" : 24 }
{ "_id" : 5, "name" : "sky_5", "age" : 24 }
{ "_id" : 6, "name" : "sky_6", "age" : 24 }
{ "_id" : 7, "name" : "sky_7", "age" : 24 }
{ "_id" : 8, "name" : "sky_8", "age" : 24 }
{ "_id" : 9, "name" : "sky_9", "age" : 24 }
> db.users.update({"_id":9},{$set:{age:29}})

1.AND 条件

> db.集合名称.find({key1:value1,key2:value2,...}).pretty()

类似于 WHERE 语句:WHERE key1=value1 AND key2=value2

2.OR 条件

MongoDB OR 条件语句使用了关键字 $or,语法格式如下:

> db.集合名称.find({$or:[{key1:value1},{key2:value2}]).pretty()

类似于 WHERE 语句:WHERE key1=value1 or key2=value2

3.AND 和 OR 联合

类似SQL语句为:’where age >50 AND(name=’sky’ OR name =’MongoDB’)’

> db.集合名称.find({"age”:{$gt:50},$or:[{"name":"sky"},{"name":"MongoDB"}]}).pretty()

> db.users.find({"age":24,$or:[{"name":'sky_4'},{"name":'sky'}]});
{ "_id" : 4, "name" : "sky_4", "age" : 24 }

4.排序

> db.集合名称.find().sort({name:1,age:1})

# 1 升序  -1 降序

类似 SQL 语句为:’order by name,age’

5.总条数

> db.集合名称.count() 
> db.集合名称.find({"name":"sky"}).count()

类似于 SQL语句为:’select count(id) from…’

6.去重

> db.集合名称.distinct('字段')

7.指定返回字段

> db.集合名称.find({条件},{name:1,age:1})

1返回     o不返回

注意:1和0不能同时使用

4.删除文档

# 语法
db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

# 案例
db.getCollection('dpp_checkplans').remove({company : ObjectId("62bd3d4cb762960480b4b678")})
Removed 2 record(s) in 3ms

参数说明:

  • query :(可选)删除的文档的条件。

  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

  • writeConcern :(可选)抛出异常的级别。

二、MongoDB 数据备份与恢复

1.数据备份

        在Mongodb中我们使用 mongodump 命令来备份 MongoDB 数据。该命令可以导出所有数据到指定目录中。

        mongodump 命令可以通过参数指定导出的数据量级转存的服务器。

        Mongodump 命令脚本语法如下:

mongodump -h dbhost -d dbname -o dbdirectory
  • -h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
  • -d: 需要备份的数据库实例,例如:test
  • -o: 备份的数据存放位置,例如:d:\mongodb\data\dump,当然该目录需要提前建立,在备份完 成后,系统自动在dump目录下建立一个(与备份数据库同名)目录,这个目录里面存放该数据库实例的备份数据。

进入MongoDB安装目录的 bin目录输入如下命令:

# 对有安全认证的MongoDB备份操作:
mongodump -h 127.0.0.1:27017 -u uaad -p uaad -d users -o /root/mongo --authenticationDatabase admin

-u 用户名
-p 用户密码
--authenticationDatabase 指定校验的数据库

2.数据恢复

mongodb使用 mongorestore 命令来恢复备份的数据,其命令脚本语法如下:

mongorestore -h dbhost -d dbname dbdirectory
  • -h:MongoDB所在服务器地址
  • -d:需要恢复的数据库实例,例如:test,也可以自定义名称
  • –directory:备份数据所在位置,例如:D:\mongodb\data\dump\users,这里路径要具体到文件名users
mongodump -h 127.0.0.1:27017 -u uaad -p uaad -d user -o /root/mongo/users --authenticationDatabase admin

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74631.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!