目录
一、MongoDB 集合操作
MongoDB中的集合是一组文档的集,相当于关系型数据库中的表。
1.创建集合
MongoDB使用 db.createCollection()函数来创建集合。
语法格式:db.createCollection(name,options)。
name:要创建的集合名称。
options:可选参数,指定有关内存大小及索引的选项。
创建一个默认选项的集合 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