MongoDB数据库文档相关操作超详细

一、插入文档

使用insert方法插入数据
在MongoDB中使用 insert() 或 save() 方法向集合中插入文档,语法如下:

db.COLLECTION_NAME.insert(document) 

其中:collection_name代表集合名;Document代表文档名
案列:

db.col.insert({
name:"张三",
age:22,
sex:"男",
like:["吃饭","运动","看书"]
})

或者:

d=({name:"张三",
age:22,
sex:"男",
like:["吃饭","运动","看书"]
})
db.col.insert(d)

二、更新文档

1. 使用update()方法更新数据

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

db.collection.update( 
	<query>, 
	<update>, 
	{ 
	 upsert: <boolean>,
	 multi: <boolean>
	} 
)

参数说明 :
• query : update的查询条件。
• update : update的对象和一些更新的操作符(如 $ ,$inc…)等,可以理解为sql update查询内set后面的
upsert : 可选,意思是,如果不存在 update的记录,是否插入。true为插 入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只 更新找到的第一条记录,如果为true, 就把按条件查出来多条记录全部更新
案例:

db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB’}})

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

db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})

2. 使用save()方法更新数据

db.col.save({ 
"_id" : ObjectId("56064f89ade2f21f36b03136"), 
name:"李四",
age:24,
sex:"女",
like:["吃饭","睡觉","打豆豆"]

三、删除文档

• MongoDB remove()函数用来移除集合中的数据。
• 在执行remove()函数前先执行find()命令来判断执行的条件是否正确。
格式:

 db.collection.remove( 
 	<query>, 
	 {
		 justOne: <boolean>
	  } 
  )

参数说明:
• query :(可选)删除的文档的条件。
• justOne : (可选)如果设为 true 或 1,则只删 除一个文档,如果不设置该参数,或使用默认 值 false,则删除所有匹配条件的文档。
案例:
删除title为“MongoDB 教程”的数据

db.col.remove({'title':'MongoDB 教程'})

四、查询文档

1. find() 方法。

• find() 方法以非结构化的方式来显示所有文档。
格式:

db.collection.find(query, projection) 

注意:
1)query :可选,使用查询操作符指定查询条件
2)projection :可选,使用投影操作符指定返回的键。
3)需要以格式化的方式来读取数据,可以使用 pretty() 方法

db.collection.find(query, projection).pretty()

案列:
查询集合中的数据,格式化显示

db.col.find().pretty()

注意:除了 find() 方法之外,还有一个 findOne() 方法,它只返回 一个文档。

2. 条件查询

1)MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常 规 SQL 的 AND 条件。
格式:

db.col.find({key1:value1, key2:value2}).pretty()

案例:
查询22岁男子信息

db.col.find({age:22,sex:"男"})

2)MongoDB OR 条件语句使用了关键字 $or
格式:

db.collection.find( 
	{
		$or: [ 
			{key1: value1}, {key2:value2}
		]
	} 
).pretty()

案例:查询年龄为22岁或者性别为男的信息

 db.col.find({$or:[{age:22},{sex:"男"}]}).pretty()

3. 条件操作符

条件操作符用于比较两个表达式并从mongoDB集合中获取数据。
MongoDB中条件操作符有:
• (>) 大于 - $gt
• (<) 小于 - $lt
• (>=) 大于等于 - $gte
• (<= ) 小于等于 - $lte
• ( != ) 不等于 - $ne
在这里插入图片描述
案例:
1)获取 “col” 集合中 “likes” 大于 100 的数据。

 db.col.find({likes : {$gt : 100}})

2)获取“col”集合中 “likes” 大于100,小于 200 的数据。

db.col.find({likes : {$lt :200, $gt : 100}})

3)查询年龄在18岁以上,且性别为男或者名字叫小张的数据

db.col.find({age: {$gt:18}, $or: [{sex: “男"},{name: "小张"}]}).pretty()

4. $type操作符

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
MongoDB 中可以使用的类型如下表所示:
在这里插入图片描述
案列:
1)获取 “col” 集合中 title 为 String 的数据。

 db.col.find({"title" : {$type : 2}}) 
 或
 db.col.find({"title" : {$type : 'string'}})

5. limit()方法

在MongoDB中读取指定数量的数据记录,可以使用Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。使用的基本语法为:

db.COLLECTION_NAME.find().limit(NUMBER)

其中:collection_name代表集合名称;number代表记录条数。
注意:如果没有指定limit()方法中的参数则显示集合中的所有数据。
案例:
显示集合中的两条文档记录。

 db.testcol.find().limit(2);

6. Skip()方法

除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。语法格式如下:

 db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER) 

注意:skip()方法默认参数为 0 。
案例:
查询前三条文档,跳过前两条。

db.testcol.find().limit(3).skip(2); 
db.testcol.find().skip(2);

7. 排序查询

MongoDB中使用 sort() 方法对数据进行排序。
• sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其 中 1 为升序排列,而 -1 是用于降序排列。
• 基本语法为:

db.COLLECTION_NAME.find().sort({KEY:1})

案例:
在testcol集合中按照age进行降序排列。

db.testcol.find().sort({age:-1}) 
db.testcol.find().sort({age:1})

8. 聚合函数

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回 计算后的数据结果。有点类似sql语句中的 count(*)。
• MongoDB中聚合的方法使用aggregate()。
• aggregate() 方法基本语法格式如下:

 db.集合的名字.aggregate([ 
 	{ 
 		管道:{聚合操作表达式}
	} 
 ])

管道:就是把找到的数据进行过滤
• $ project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以 用于创建计算结果以及嵌套文档。
• $ match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB 的标准查询操作。
• $ limit:用来限制MongoDB聚合管道返回的文档数。
• $ skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
• $ group:将集合中的文档分组,可用于统计结果。
• $ sort:将输入文档排序后输出。
常用聚合表达式
• $sum计算总和。
• $avg 计算平均值
• $min 获取集合中所有文档对应值得最小值。
• $max获取集合中所有文档对应值得最大值。

五、实战练习

db.student.insert([ 
	{name:"张三",age:18,sex:"男",grade:78}, 
	{name:"李三",age:19,sex:"女",grade:88}, 
	{name:"赵三",age:18,sex:"女",grade:68}, 
	{name:"王三",age:20,sex:"男",grade:98}, 
	{name:"孙三",age:21,sex:"男",grade:76}, 
	{name:"韩三",age:23,sex:"男",grade:73} 
])
  1. 统计男生和女生的总成绩 对成绩进行求和 s u m sum 分组 group 性别
db.student.aggregate([
{
	$group:{
	_id:"$sex", 
	he:{
		$sum:"$grade"
	}}
}]) 
  1. 统计男生和女生各有多少人 查询的是总人数 $sum:1 分别统计男生和女生的人数分组 $group
    //_id属性是为了指定分组的字段
db.student.aggregate([
{ 
	$group:{ 
		_id:"$sex", 
		ren:{ 
			$sum:1
		}
	}
}])
  1. 求学生的总数和平均分 查:学生总数 $sum:1 平均成绩 $avg 用不到分组 _id:null
db.student.aggregate([ 
{ 
	$group:{ 
		_id:null, 
		zongshu:{ 
			$sum:1 
		}, 
		pingjunfen:{ 
			$avg:"$grade" 
		}
	}
} 
])
  1. 查询男生和女生的人数,按人数升序排列
db.student.aggregate([ 
	{ 
		$group:{ 
			_id:"$sex", renshu:{ $sum:1 } 
		} 
	},
	{ 
		$sort:{ 
			renshu:-1
		} 
	} 
])
  1. 查看年龄大于等于20,只看两条记录
db.student.aggregate([ 
	{ 
		$match:{ age:{$gte:18}, } 
	},
	{ 
		$limit:2 
	},
	{ 
		$skip:1 
	} 
])
  1. 查看男生的最高成绩 $max 性别是男
 db.student.aggregate([ 
 	{ 
 		$match:{ sex:"男" } 
 	},
 	{ 
 		$group:{ 
			_id:"$sex", 
 			zuida:{ $max:"$grade" } 
 		} 
 	} 
 ])

看完点个赞呗!

猜你喜欢

转载自blog.csdn.net/yang_yang_heng/article/details/107522716
今日推荐