MongoDB 学习第三课--MongoDB基本命令操作

为了方便查阅,这里将MongoDB常用命令进行了整理。

目录

一、数据库级操作

 1、  查看数据库 show dbs

2、使用指定库 use dukun

3、查看所有数据集

查看当前使用的库

删除数据库

二、Collection级操作

1、新建collection db.createCollection("user")

2、删除collection   db.user.drop()

3、重命名collection  db.hello.renameCollection("HELLO")

4、创建索引在HELLO集合上,建立对Name字段的索引,1代表正序

三、Record级的操作

1、插入数据

查找记录

删除操作

更新操作

数组操作

runCommand 函数和 findAndModify 函数 


一、数据库级操作

 1、  查看数据库 show dbs

2、使用指定库 use dukun

> use dukun
switched to db dukun

3、查看所有数据集

> show collections
bruteforces
entries
sessions
settings
uplfiles
uplfolders
users

4、创建数据库

使用use可以直接创建数据库,不过直到插入数据时,使用 show dbs才能看到库

> use test
switched to db test
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
wiki    0.001GB
> db.hello.insert({"name":"mongodb"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
wiki    0.001GB

查看当前使用的库

> db
test

删除数据库

> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }

> db
test
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
wiki    0.001GB

二、Collection级操作

  collection 相当于数据库中的表

1、新建collection db.createCollection("user")

> db.createCollection("user")
{ "ok" : 1 }
> show collections
hello
user

效果与使用 db.user.insert({"user":"xxx"})类似。

2、删除collection   db.user.drop()

> db.user.drop()
true
> show collections
hello
> db.user.drop() ### 再删除已经不存在
false

3、重命名collection  db.hello.renameCollection("HELLO")

> show collections
hello
> db.hello.renameCollection("HELLO")
{ "ok" : 1 }
> show collections
HELLO

4、创建索引在HELLO集合上,建立对Name字段的索引,1代表正序

> db.HELLO.ensureIndex({NAME:1})

三、Record级的操作

使用实现存在的test数据库做测试,其中有个Collection:user

1、插入数据

向user插入数据

> db.user.insert({'name':'Gal Gadot','gender':'female','age':28,'salary':11000})  
> db.user.insert({'name':'Mikie Hara','gender':'female','age':26,'salary':7000})  

也可以使用save插入

> db.user.save({'name':'Wentworth Earl Miller','gender':'male','age':41,'salary':33000})  

查找记录

 1、查看集合所有记录  find()

> db.user.find()
{ "_id" : ObjectId("5d8985552eba8f32e136f0cc"), "name" : "dukun", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5d8985602eba8f32e136f0cd"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5d89856b2eba8f32e136f0ce"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }
{ "_id" : ObjectId("5d89857b2eba8f32e136f0cf"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }
> 

2、随机查看一条记录 findone()

> db.user.findOne()
{
	"_id" : ObjectId("5d8985552eba8f32e136f0cc"),
	"name" : "dukun",
	"gender" : "female",
	"age" : 28,
	"salary" : 11000
}

3、查找符合记录的记录

  • Exact Equal    db.user.find({"age":28})
> db.user.find({"age":28})
{ "_id" : ObjectId("5d8985552eba8f32e136f0cc"), "name" : "dukun", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5d8985602eba8f32e136f0cd"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }

 4高级查询详解

      db.t_member.find({},{_id:0,name:1})

       第一个空括号表示查询全部数据,第二个括号中值为 0 表示不返回,值为 1 表示返回,默认情况下若不 指定主键,主键总是会被返回;

> db.user.find({},{_id:0,name:1})
{ "name" : "dukun" }
{ "name" : "Gal Gadot" }
{ "name" : "Mikie Hara" }
{ "name" : "Wentworth Earl Miller" }

     db.persons.find({条件},{指定键});

  •     比较操作符:$lt: <        $lte: <=         $gt: >           $gte: >=               $ne: != 
#查询年龄大于等于 26 小于等于 28 的人 ,且只显示name和age
db.t_member.find({age:{$gte:26,$lte:28}},{_id:0,name:1,age:1})

{ "name" : "dukun", "age" : 28 }
{ "name" : "Gal Gadot", "age" : 28 }
{ "name" : "Mikie Hara", "age" : 26 }
{ "name" : "bwukl", "age" : 27 }
> 
  •   包含与不包含   $in 或 $nin
> db.user.find({"city":{$in:["beijing","nanjing"]}})
{ "_id" : ObjectId("5d8afc70a1532b629d5f4919"), "name" : "bwukl", "age" : 27, "aihao" : [ "daqiu", "tiaowu" ], "city" : "nanjing" }
{ "_id" : ObjectId("5d8afc87a1532b629d5f491a"), "name" : "taos", "age" : 37, "aihao" : [ "meinv", "tiaowu" ], "city" : "nanjing" }
{ "_id" : ObjectId("5d8afcbba1532b629d5f491b"), "name" : "tassss", "age" : 37, "aihao" : [ "meinv", "lvyou" ], "city" : "beijing" }
  •     $or 查询 
#查询语文成绩大于 85 或者英语大于 90 的学生信息
 db.t_member.find({$or:[{c:{$gt:85}},{e:{$gt:90}}]},{_id:0,name:1,c:1,e:1}) 
  •    正则表达式      /查询项/
#查询名字中用ta的
> db.user.find({"name":/ta/})
{ "_id" : ObjectId("5d8afc87a1532b629d5f491a"), "name" : "taos", "age" : 37, "aihao" : [ "meinv", "tiaowu" ], "city" : "nanjing" }
{ "_id" : ObjectId("5d8afcbba1532b629d5f491b"), "name" : "tassss", "age" : 37, "aihao" : [ "meinv", "lvyou" ], "city" : "beijing" }
  •   $not 的使用
#查询出名字不包含k的
> db.user.find({"name":{$not:/k/}})
{ "_id" : ObjectId("5d8985602eba8f32e136f0cd"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5d89857b2eba8f32e136f0cf"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 }
{ "_id" : ObjectId("5d8adf40a1532b629d5f4916"), "name" : "bajie", "age" : 19 }
{ "_id" : ObjectId("5d8afc87a1532b629d5f491a"), "name" : "taos", "age" : 37, "aihao" : [ "meinv", "tiaowu" ], "city" : "nanjing" }
{ "_id" : ObjectId("5d8afcbba1532b629d5f491b"), "name" : "tassss", "age" : 37, "aihao" : [ "meinv", "lvyou" ], "city" : "beijing" }
  • 查询name以W打头的数据
> db.user.find({name:/^W/})
{ "_id" : ObjectId("5ce4f4dc3e7e1703c34ec0d3"), "name" : "Wentworth Earl Miller", "gender" : "male","age" : 41, "salary" : 33000 }
  • 多条件“与”
    查询age小于30,salary大于6000的数据
> db.user.find({age:{$lt:30},salary:{$gt:6000}})
{ "_id" : ObjectId("5ce4f4c33e7e1703c34ec0d1"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5ce4f4d03e7e1703c34ec0d2"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }
  • 多条件“或”
    查询age小于25,或者salary大于10000的记录
> db.user.find({$or:[{salary:{$gt:10000}},{age:{$lt:25}}]})
{ "_id" : ObjectId("5ce4f4c33e7e1703c34ec0d1"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5ce4f4dc3e7e1703c34ec0d3"), "name" : "Wentworth Earl Miller", "gender" : "male","age" : 41, "salary" : 33000 }
  • 查询指定字段的数据,并去重
> db.user.distinct('gender')
[ "female", "male" ]

 

  • 指定结果集返回条目
> db.user.find().limit(2)
{ "_id" : ObjectId("5ce4f4c33e7e1703c34ec0d1"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5ce4f4d03e7e1703c34ec0d2"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }

 

  • 查询第一条以外的数据
> db.user.find().skip(1)
{ "_id" : ObjectId("5ce4f4d03e7e1703c34ec0d2"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }
{ "_id" : ObjectId("5ce4f4dc3e7e1703c34ec0d3"), "name" : "Wentworth Earl Miller", "gender" : "male","age" : 41, "salary" : 33000 }
  • 对结果集排序   sort 排序 1 为正序,-1 为倒序 
    升序
> db.user.find().sort({salary:1})
{ "_id" : ObjectId("5ce4f4d03e7e1703c34ec0d2"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }
{ "_id" : ObjectId("5ce4f4c33e7e1703c34ec0d1"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5ce4f4dc3e7e1703c34ec0d3"), "name" : "Wentworth Earl Miller", "gender" : "male","age" : 41, "salary" : 33000 }

       降序

> db.user.find().sort({salary:-1})
{ "_id" : ObjectId("5ce4f4dc3e7e1703c34ec0d3"), "name" : "Wentworth Earl Miller", "gender" : "male","age" : 41, "salary" : 33000 }
{ "_id" : ObjectId("5ce4f4c33e7e1703c34ec0d1"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 }
{ "_id" : ObjectId("5ce4f4d03e7e1703c34ec0d2"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 }
  • 统计结果集中的记录数量
> db.user.find().count()

删除操作

    

删除整个集合中的所有数据

> db.test.remove()

删除集合中符合过滤条件的数据

> db.test.remove({name:/aws/})

删除符合条件的一条记录

> db.test.remove({name:/aws/},1)

更新操作

db.collection.update(criteria, objNew, upsert, multi )

  • criteria:update的查询条件,类似sql update查询内where后面的
  • objNew:update的对象和一些更新的操作符(如)等,也可以理解为sql update查询内set后面的。
  • upsert : 如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
> db.user.find() 
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 28, "salary" : 11000 } 
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 } 
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 } 

## 更新符合过滤条件的信息
> db.user.update({name:'Gal Gadot'},{$set:{age:23}},false,true) 
> db.user.find() 
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 23, "salary" : 11000 } 
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female", "age" : 26, "salary" : 7000 } 
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 } 

## 添加新的字段
> db.user.update({name:'Mikie Hara'},{$set:{interest:"CBA"}},false,true) 
> db.user.find() 
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 23, "salary" : 11000 } 
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female","interest" : "CBA", "age" : 26, "salary" : 7000 } 
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 } 

## 使用函数 $inc 只能对数字使用
> db.user.update({gender:'female'},{$inc:{salary:50}},false,true) 
> db.user.find() 
{ "_id" : ObjectId("52453cfb25e437dfea8fd4f4"), "name" : "Gal Gadot", "gender" : "female", "age" : 23, "salary" : 11050 } 
{ "_id" : ObjectId("52453d8525e437dfea8fd4f5"), "name" : "Mikie Hara", "gender" : "female","interest" : "CBA", "age" : 26, "salary" : 7050 } 
{ "_id" : ObjectId("52453e2125e437dfea8fd4f6"), "name" : "Wentworth Earl Miller", "gender" : "male", "age" : 41, "salary" : 33000 } 

##$unset : 删除指定的键 删除gender

> db.user.update({"name":"dukun"},{$unset:{"gender":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

数组操作

  •   $push :

          数组键操作:1、如果存在指定的数组,则为其添加值;2、如果不存在指定的数组,则 创建数组键,并添加值;3、如果指定的键不为数组类型,则报错; 

> db.user.update({"name":"dukun"},{$push:{"class":["CN","JAVA"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find({"name":"dukun"})
{ "_id" : ObjectId("5d8985552eba8f32e136f0cc"), "name" : "dukun", "age" : 18, "salary" : 11000, "class" : [ [ "CN", "JAVA" ] ] }
  •   $addToSet : 当指定的数组中有这个值时,不插入,反之插入
#则不会添加到数组里
db.t_member.update({name:"zhangsan"},{$addToSet:{classes:"English"}}) ; 
  • $pop:删除指定数组的值,当 value=1 删除最后一个值,当 value=-1 删除第一个值
     
#删除了最后一个值
db.t_member.update({name:"zhangsan"},{$pop:{classes:1}}) 
  • $pull : 删除指定数组指定的值 

 

#$pullAll 批量删除指定数组 
db.persons.update({name:"zhangsan"},{$pull:{classes:"Chinese"}})
  • $ : 修改指定数组时,若数组有多个对象,但只想修改其中一些,则需要定位器: 
db.t_member.update({"classes.type":"AA"},{$set:{"classes.$.sex":"male "}}) 

runCommand 函数和 findAndModify 函数 

runCommand({
 findAndModify:"persons",
   query:{查询器}, 
   sort:{排序}, 
   update:{修改器}, 
   new:true 是否返回修改后的数据
});

runCommand 函数可执行 mongdb 中的特殊函数

findAndModify 就是特殊函数之一,用于返回执行返回 update 或 remove 后的文档 例如: 

> db.runCommand({ findAndModify:"user", query:{name:"dukun"}, update:{$set:{age:16}}, new:true }) 
{
	"lastErrorObject" : {
		"n" : 1,
		"updatedExisting" : true
	},
	"value" : {
		"_id" : ObjectId("5d8985552eba8f32e136f0cc"),
		"name" : "dukun",
		"age" : 16,
		"salary" : 11000,
		"class" : [
			"java",
			"java",
			"c"
		],
		"classes" : [
			"English"
		],
		"ji" : [
			"c"
		]
	},
	"ok" : 1
}
  • group 分组

 

db.runCommand({ group:{
           ns:"集合的名字", 
          key:"分组键对象",
          initial:"初始化累加器", 
          $reduce:"分解器", 
          condition:"条件", 
          finalize:"组完成器"
}})

       分组首先会按照 key 进行分组,每组的 每一个文档全要执行$reduce 的方法,他接收 2 个参数一个是组 内本条记录,一个是累加器数据.

请查出 persons 中每个国家学生数学成绩最好的学生信息(必须在 90 以上) 

db.runCommand({  
      group:{ ns:"persons",
              key:{"country":true}, 
              initial:{m:0}, 
              $reduce:function(doc,prev)  {
                 if(doc.m>prev.m){
                 prev.m = doc.m; prev.name = doc.m;
                 prev.country =  doc.country; } },
                 condition:{m:{$gt:90}},
             finalize:function(prev){ 
                 prev.m = prev.name+" comes from "+prev.country+" ,
                Math score is "+prev.m; } }
         })

MongoDB 索引 

    

  •    建索引 
> db.user.ensureIndex({number:1})
{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}
  • 创建索引同时指定索引的名字 
> db.user.ensureIndex({number:1},{"name":"d_"})
{
	"ok" : 0,
	"errmsg" : "Index with name: d_ already exists with a different name",
	"code" : 85,
	"codeName" : "IndexOptionsConflict"
}

   索引使用需要注意的地方

         1)创建索引的时候注意 1 是正序创建索引-1 是倒序创建索引

         2)索引的创建在提高查询性能的同事会影响插入的性能 对于经常查询少插入的文档可以考虑用索引

         3)符合索引要注意索引的先后顺序

        4)每个键全建立索引不一定就能提高性能呢 索引不是万能的

        5)在做排序工作的时候如果是超大数据量也可以考虑加上索引 用来提高排序的性能 

  •    唯一索引 解决文档 不能插入重复的数值 
#则插入相同的 name 值会报错 
   db.user.ensureIndex({name:-1},{unique:true})
  •     如果建议唯一索引之前已经有重复数值如何处理
#剔除重复数值
db.books.ensureIndex({name:1},{name:"book_",unique:true,dropDups:true }) 
  •     后台执行创建索引

    为了解决创建索引锁表的问题,在不影响查询功能,可以在后台运行

db.books.ensureIndex({name:1},{background:true}) 
  •     强制查询已经建立好的索引 #后一个 name 为索引名,正序倒
#后一个 name 为索引名,正序倒序依据建立索引的规则,否则会报错 db.books.find({name:"323book"}).hint({name:1}) 
  • 在 shell 查看数据库已经建立的索引 
db.system.indexes.find() 
db.system.namespaces.find() 
  • 查询索引信息和查询状态信息 
db.books.find({name:"123book"}).explain() 
  • 批量和精确删除索引
db.runCommand({dropIndexes : "books" , index:"name_-1"}) 
db.runCommand({dropIndexes : "books" , index:"*"}) 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值