目录
MongoDB中的集合是一组文档的集,相当于关系型数据库中的表。
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 是无法查看到的。需要向集合中插入一个文档才能看见。
通过 show tables 或 show collections 查看所有集合。
通过 db.COLLECTION_NAME.stats() 查看集合详情。
通过 db.COLLECTION_NAME.drop()删除集合。
- > db.c1.drop()
- true
- > show tables
- c2
- c4
- system.users
- system.version
可以使用 insert/insertone/save 插入单条文档:
(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字段,则变为更新文档的操作。
可以使用 insert/insertMany/save 插入多条文档。区别在于把单条插入时函数参数的对象类型{} 变成数组类型 [ {},{} ] :
- > 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" : [ ]
- })
通过 update 系列函数或者 save 函数可以更新集合中的文档,我们来详细看下 update 函数的使用,上一节已经介绍过 save 函数。
update()函数用于更新已存在的文档。语法格式如下:
db.COLLECTION_NAME.update(query, update, {upsert,multi})
- 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以外其他属性将会被删除。
MongoDB查询文档使用 find() 方法。find() 方法以非结构化的方式来显示所有文档。 语法 :
> db.集合名称.find(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}})
> db.集合名称.find({key1:value1,key2:value2,...}).pretty()
类似于 WHERE 语句:WHERE key1=value1 AND key2=value2
MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
> db.集合名称.find({$or:[{key1:value1},{key2:value2}]).pretty()
类似于 WHERE 语句:WHERE key1=value1 or key2=value2
类似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 }
- > db.集合名称.find().sort({name:1,age:1})
-
- # 1 升序 -1 降序
类似 SQL 语句为:'order by name,age'
- > db.集合名称.count()
- > db.集合名称.find({"name":"sky"}).count()
类似于 SQL语句为:'select count(id) from...'
> db.集合名称.distinct('字段')
- > db.集合名称.find({条件},{name:1,age:1})
-
- 1返回 o不返回
注意:1和0不能同时使用
在Mongodb中我们使用 mongodump 命令来备份 MongoDB 数据。该命令可以导出所有数据到指定目录中。
mongodump 命令可以通过参数指定导出的数据量级转存的服务器。
Mongodump 命令脚本语法如下:
mongodump -h dbhost -d dbname -o dbdirectory
进入MongoDB安装目录的 bin目录输入如下命令:
- # 对有安全认证的MongoDB备份操作:
- mongodump -h 127.0.0.1:27017 -u uaad -p uaad -d users -o /root/mongo --authenticationDatabase admin
-
- -u 用户名
- -p 用户密码
- --authenticationDatabase 指定校验的数据库
mongodb使用 mongorestore 命令来恢复备份的数据,其命令脚本语法如下:
mongorestore -h dbhost -d dbname dbdirectory
mongodump -h 127.0.0.1:27017 -u uaad -p uaad -d user -o /root/mongo/users --authenticationDatabase admin