首页 / MONGODB / MongoDB基本语句练习
MongoDB基本语句练习
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MongoDB基本语句练习,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含12695字,纯文字阅读大概需要19分钟。
内容图文
![MongoDB基本语句练习](/upload/InfoBanner/zyjiaocheng/867/7e74f69f082443c29c51dba141d7809d.jpg)
文章目录
- 课时一:MongoDB基本使用
- 课时二:数据增加 JSON格式#
- 课时三:数据查询 JSON格式#
- 课时四:where查询
- 课时五 :正则查询
- 课时六 :数据排序
- 课时七:分页控制
- 课时八:数据更新
- 课时九:修改器
- 课时十:数据删除
- 课时十一:关系运算
- 课时十二:逻辑运算
- 课时十三:模运算、范围运算
- 课时十四:数组运算
- 课时十四:嵌套元素查询
- 课时十五:唯一索引
注:语句前带 > ,说明是在mongo下运行的命令,后面数据即是该语句返回的结果
课时一:MongoDB基本使用
1.启动mongo
mongo
2.显示所有数据库
show dbs
show databases
3.显示集合
show collections
4.选择库
use dept
5.定义一个变量
var deptData = {
"deptno": 20,
"dname": "产品部",
"loc": "深圳",
"count": 20,
"avg":8000.0
};
6.插入数据
db.dept.insert(deptData)
7.显示集合所有数据
db.dept.find()
8.显示一条数据
db.dept.findOne()
9.删除数据
db.dept.remove({"dname": "产品部"})
10.删除集合
db.dept.drop()
11.删除数据库(当前所在的数据库)
db.dropDatabase()
课时二:数据增加 JSON格式#
使用“db.集合.insert()” 可以实现数据的增加操作
1.范例:增加一个简单的数据
db.infos.insert({"url":"www.baidu.com"});
2.范例:增加多个数据,使用数组
db.infos.insert([
{"url":"www.google.com"},
{"url":"www.360.com"}
]);
3.查看集合内容
> db.infos.find()
{ "_id" : ObjectId("5ff414f18be29a67668e3828"), "url" : "www.baidu.com" }
{ "_id" : ObjectId("5ff416688be29a67668e3829"), "url" : "www.google.com" }
{ "_id" : ObjectId("5ff416688be29a67668e382a"), "url" : "www.360.com" }
4.范例:增加一万条数据
for(var x = 0 ; x<10000 ; x++){
db.infos.insert({"url":"www."+ x +".com"});
}
如果使用find查看内容较多,列表不会全部列出,只会列出一部分
课时三:数据查询 JSON格式#
使用 db.infos.find() 可以实现查询操作
1.范例:查询url为“www.baidu.com”的数据
>db.infos.find({"url":"www.baidu.com"})
{ "_id" : ObjectId("5ff414f18be29a67668e3828"), "url" : "www.baidu.com" }
2.范例:查询的数据不显示 “_id”
> db.infos.find({"url":"www.baidu.com"},{"_id":0})
{ "url" : "www.baidu.com" }
3.范例:使用函数 pretty() 漂亮显示
db.infos.find({"url":"www.baidu.com"},{"_id":0}).pretty()
课时四:where查询
1.补充数据
for(var x = 20 ; x<30 ; x++){
db.student.insert({"name":"stu"+(x-19),"age":x});
}
2.查询年龄大于 28 的数据
db.student.find({"$where":"this.age>28"}).pretty()
{
"_id" : ObjectId("5ff41e418be29a67668e5f44"),
"name" : "stu10",
"age" : 29
}
3.也可以省略$where
db.student.find("this.age>28").pretty()
4.实际上以上代码严格来讲是属于一个操作的函数 js
db.student.find(
function(){
return this.age > 28;
}
).pretty();
5.多个条件判断,需要使用$and 查询年龄大于19小于22的数据,不显示_id
>db.student.find(
{"$and":[
{"$where":"this.age>19"},
{"$where":"this.age<22"}
]},{"_id":0}
)
{ "name" : "stu1", "age" : 20 }
{ "name" : "stu2", "age" : 21 }
课时五 :正则查询
如果想要实现模糊查询,那么必须使用正则表达
基础语法:{key : 正则标记}
完整语法:{key : {“
r
e
g
e
x
"
:
正
则
标
记
,
"
regex":正则标记 , "
regex":正则标记,"options”:选项} }
对于options主要是设置正则的信息查询的标记
“i” :忽略字母大小写
“m” :多行查找
“x” :空白字符串除了转义的或字符类中意外的完全被忽略
“s” :匹配所有的字符,包括换行内容
1.范例:查询姓名有字母a/A (i忽略大小写)
db.student.find({"name":{$regex:/A/i}})
db.student.find( {"name":/a/i} ).pretty()
2.范例:查询数组数据 课程带“语”的
db.student.find("course":/语/)
课时六 :数据排序
数据排序操作使用sort()函数,升序(1) , 降序(-1)
1.范例:学生的成绩降序
db.student.find().sort({"score":-1}).pretty()
在排序的过程有一种方式称为自然排序,按照数据保存的先后顺序排序
使用"$natural"
2.范例:自然排序
db.student.find().sort({"$natural":-1}).pretty()
课时七:分页控制
skip(n) : 表示跨过多少数据行
imit(n) : 取出的数据行的个数限制
1.范例:分页显示(第一页)
> db.infos.find().skip(0).limit(3).sort({"$natural":1}).pretty()
{ "_id" : ObjectId("5ff414f18be29a67668e3828"), "url" : "www.baidu.com" }
{ "_id" : ObjectId("5ff416688be29a67668e3829"), "url" : "www.google.com" }
{ "_id" : ObjectId("5ff416688be29a67668e382a"), "url" : "www.360.com" }
2.范例:分页显示(第二页)
> db.infos.find().skip(3).limit(3).sort({"$natural":1}).pretty()
{ "_id" : ObjectId("5ff417dd8be29a67668e382b"), "url" : "www.0.com" }
{ "_id" : ObjectId("5ff417dd8be29a67668e382c"), "url" : "www.1.com" }
{ "_id" : ObjectId("5ff417dd8be29a67668e382d"), "url" : "www.2.com" }
课时八:数据更新
在MongoDB对于数据的更新提供了两类函数:update() 、save()
update语法:db.集合.update(更新条件 , 新的对象数据 , upsert , multi);
upsert : 如果更新的数据不存在,则增加一条新的内容(true为增加,false不增加)
multi : 表示是否只更新满足条件的第一行记录(如果设置false,只更新第一行,true全部更新)
1.范例:更新存在的数据——将年龄为20岁的人的姓名更新为xx
#只更新第一条
db.student.update({"age":20} , {"$set":{"name":"xx"}},false , false)
# 所有满足条件的数据都更新
db.student.update({"age":20} , {"$set":{"name":"xx"}},false , true)
2.范例:更新不存在的数据
> db.student.update({"age":101},{"$set":{"name":"不存在"}},true,false)
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("5ff520940f3db5f6aef156f9")
})
# 可以发现,匹配数据0 , 插入数据1 , 修改数据0
> db.student.find({"name":"不存在"},{"_id":0})
{ "age" : 101, "name" : "不存在" }
save()方法
1.范例:王小明的数据修改为李小红:
db.student.save({
"_id" :1,
"name" : "李小红",
"sex" : "女",
"hobbies" : [
"画画",
"唱歌",
"跳舞"
],
})
注:如果save()指定了_id,则对文档进行更新;
未指定_id则会执行插入功能,MongoDB默认自动生成一个不重复的_id
update()方法适用于修改某条数据中的某个键值;
save()方法适用于修改整条数据。
课时九:修改器
之前使用的"$set" 就是一个修改器
1.$inc : 主要针对一个数字字段,增加某个数字字段的数据内容
# 范例:将年龄为20岁的学生成绩一律减30分,年龄加1岁
db.student.update({"age":20},{"$inc":{"score":-30,"age":1}})
2.$set : 进行内容的重新设置
3.$unset : 删除某个成员的内容
# 范例:删除年龄为20岁的成绩信息
db.student.update({"age":21},{"$unset":{"score":1}})
4.$push : 相当于将内容追加到指定的成员之中(基本上是数组)
# 范例:向年龄为21岁的同学添加课程信息
db.student.update({"age":21},{"$push":{"course":["数学","语文"]}})
# 注:如果没有数组,进行一个新的数组创建,else ,进行内容的追加
5.$pushAll : 与"$push"是类似的,可以一次追加多个内容到数组里面
# 范例:向"小明"的信息里面添加多个课程内容
db.student.update({"name":"小明"},{"$pushAll":{"course":["音乐","美术"]}})
6.$addToSet : 向数组里面增加一个新的内容,只有内容不存在的时候才会增加
7.$pop : 删除数组内的数据
# 语法:{"$pop":{成员:内容}} ,如果内容为-1表示删除第一个,1删除最后一个
db.student.update({"name":"xx"},{"$pop":{"course":1}})
8.$pull : 从数组内删除一个指定内容的数据
# 语法:{"$pull":{成员:数据}}
9.$pullAll : 一次性删除多个
# 语法:{"$pullAll":{成员:[数据,数据...]}}
10.$rename : 为成员名称重命名
# 语法:{"$rename":{"旧的成员名称":"新的成员名称"}}
课时十:数据删除
1.范例:清空infos集合中的内容
db.infos.remove({})
2.范例:删除所有姓名带有“1”的信息
db.student.remove({"name":/1/})
3.范例:删除姓名带有“2”的信息,只删除一个
db.student.remove({"name":/2/},true)
课时十一:关系运算
小于 : $lt 大于 : $gt 小于等于 : $lte 大于等于 : $gte 不等于 : n e 等 于 : ne 等于: ne等于:eq
1.范例:查询年龄大于20岁的同学
> db.student.find({"age":{$gt:20}},{"_id":0})
{ "name" : "小红", "sex" : "女", "age" : 22, "score" : 99, "address" : "长沙县" }
{ "name" : "张兰", "sex" : "女", "age" : 21, "score" : 69, "address" : "望城区" }
{ "name" : "小丫", "sex" : "女", "age" : 21, "score" : 67, "address" : "开福区" }
{ "name" : "小小", "sex" : "男", "age" : 22, "score" : 85, "address" : "芙蓉区" }
{ "name" : "小鸡", "sex" : "女", "age" : 21, "score" : 92, "address" : "芙蓉区" }
课时十二:逻辑运算
逻辑运算主要三种:与($and)、或($or)、非($not、$nor)
1.范例:查询年龄在19-20岁的信息
> db.student.find({"age":{"$gte":19 , "$lte":20}},{"_id":0})
{ "name" : "小三", "sex" : "男", "age" : 19, "score" : 89, "address" : "岳麓区" }
{ "name" : "小花", "sex" : "女", "age" : 20, "score" : 75, "address" : "岳麓区" }
{ "name" : "小明", "sex" : "男", "age" : 19, "score" : 55, "address" : "天心区" }
{ "name" : "小四", "sex" : "男", "age" : 20, "score" : 69, "address" : "开福区" }
{ "name" : "小狗", "sex" : "男", "age" : 20, "score" : 76, "address" : "雨花区" }
{ "name" : "小猪", "sex" : "男", "age" : 19, "score" : 96, "address" : "雨花区" }
2.范例:查询年龄大于20或者分数高于90的信息
>db.student.find({"$or":[
{"age":{"$gt":20}},
{"score":{"$gt":90}}
]},{"_id":0})
{ "name" : "小红", "sex" : "女", "age" : 22, "score" : 99, "address" : "长沙县" }
{ "name" : "张兰", "sex" : "女", "age" : 21, "score" : 69, "address" : "望城区" }
{ "name" : "小丫", "sex" : "女", "age" : 21, "score" : 67, "address" : "开福区" }
{ "name" : "小小", "sex" : "男", "age" : 22, "score" : 85, "address" : "芙蓉区" }
{ "name" : "小鸡", "sex" : "女", "age" : 21, "score" : 92, "address" : "芙蓉区" }
{ "name" : "小猪", "sex" : "男", "age" : 19, "score" : 96, "address" : "雨花区" }
3.范例:也可以进行或的取反操作(年龄不大于20或分数不高于90)
>db.student.find({"$nor":[
{"age":{"$gt":20}},
{"score":{"$gt":90}}
]},{"_id":0})
{ "name" : "小三", "sex" : "男", "age" : 19, "score" : 89, "address" : "岳麓区" }
{ "name" : "小花", "sex" : "女", "age" : 20, "score" : 75, "address" : "岳麓区" }
{ "name" : "小明", "sex" : "男", "age" : 19, "score" : 55, "address" : "天心区" }
{ "name" : "小草", "sex" : "女", "age" : 18, "score" : 80, "address" : "天心区" }
{ "name" : "小树", "sex" : "女", "age" : 18, "score" : 90, "address" : "岳麓区" }
{ "name" : "小四", "sex" : "男", "age" : 20, "score" : 69, "address" : "开福区" }
{ "name" : "小狗", "sex" : "男", "age" : 20, "score" : 76, "address" : "雨花区" }
课时十三:模运算、范围运算
模的运算使用"$mod" 来完成,语法"{$mod:[数字,余数]}"
1.范例:年龄对20取模余1
> db.student.find({"age":{"$mod":[20,1]}},{"_id":0})
{ "name" : "张兰", "sex" : "女", "age" : 21, "score" : 69, "address" : "望城区" }
{ "name" : "小丫", "sex" : "女", "age" : 21, "score" : 67, "address" : "开福区" }
{ "name" : "小鸡", "sex" : "女", "age" : 21, "score" : 92, "address" : "芙蓉区" }
*范围查询 "$in"(在范围之中),"$nin"(不在范围之中)*
2.范例:查询姓名是 [小花,小草,小兰] 的信息
> db.student.find({"name":{"$in":["小花","小草","小小"]}},{"_id":0})
{ "name" : "小花", "sex" : "女", "age" : 20, "score" : 75, "address" : "岳麓区" }
{ "name" : "小草", "sex" : "女", "age" : 18, "score" : 80, "address" : "天心区" }
{ "name" : "小小", "sex" : "男", "age" : 22, "score" : 85, "address" : "芙蓉区" }
课时十四:数组运算
针对于数组数据进行判断,可以使用:"$all"、"$size"、"$slice"、"$elemMatch"
1.范例:查询同时参加语文和表演课程的学生
> db.student.find({"course":{"$all":["语文","表演"]}},{"_id":0,"address":0,"score":0})
{ "name" : "小小花", "sex" : "女", "age" : 20, "course" : [ "语文", "数学", "音乐", "表演" ] }
{ "name" : "小小树", "sex" : "男", "age" : 19, "course" : [ "语文", "音乐", "表演" ] }
{ "name" : "小小狗", "sex" : "女", "age" : 20, "course" : [ "语文", "表演" ] }
{ "name" : "小小吖", "sex" : "男", "age" : 22, "course" : [ "语文", "表演" ] }
2.范例:查询数组中第二个内容(index=1,下标从0开始)为数学的信息
> db.student.find({"course.1":"数学"},{"_id":0,"address":0,"score":0})
{ "name" : "小小花", "sex" : "女", "age" : 20, "course" : [ "语文", "数学", "音乐", "表演" ] }
{ "name" : "小小草", "sex" : "女", "age" : 22, "course" : [ "语文", "数学", "音乐" ] }
3.范例:查询只参加三门课程的学生
> db.student.find({"course":{"$size":3}},{"_id":0,"address":0,"score":0})
{ "name" : "小小草", "sex" : "女", "age" : 22, "course" : [ "语文", "数学", "音乐" ] }
{ "name" : "小小树", "sex" : "男", "age" : 19, "course" : [ "语文", "音乐", "表演" ] }
4.范例:返回年龄为19岁的所有学生信息,但是要求只显示两门课程
# "$slice":2 ——表示前两门信息 "$slice":-2 ——后两门信息 "$slice":[1,2] ——表示中间信息
# "$slice":[1,2] 第一个数据表示跳过的数据量,第二个数据表示返回的数据量
> db.student.find({"age":19},{"course":{"$slice":2},"_id":0,"address":0,"score":0})
{ "name" : "小小树", "sex" : "男", "age" : 19, "course" : [ "语文", "音乐" ] }
课时十四:嵌套元素查询
此时给出的内容是嵌套的集合,这种集合数据的判断只能够通过 “$elemMatch”
1.范例:查询出父母有人是 工人 的信息
>db.student.find(
{"parents":{
"$elemMatch":{"job":"工人"}
}}
,{"_id":0}).pretty()
{
"name" : "大大花",
"parents" : [
{
"name" : "大花父亲",
"job" : "工人",
"age" : "49"
},
{
"name" : "大花母亲",
"job" : "职员",
"age" : "47"
}
]
}
{
"name" : "大大草",
"parents" : [
{
"name" : "大草父亲",
"job" : "工人",
"age" : "36"
},
{
"name" : "大草母亲",
"job" : "局长",
"age" : "36"
}
]
}
判断某个字段是否存在
使用"$exists" 可以判断某个字段是否存在,true为存在,false不存在
1.范例:查询具有parents成员的数据
db.student.find({"parents":{"$exists":true}})
课时十五:唯一索引
唯一索引的主要目的是用在某一个字段上,使该字段的内容不重复
1.范例:创建一个唯一索引
db.student.ensureIndex({"name":1},{"unique":true})
# 表示name字段上的内容不允许重复
2.测试:增加一条name重复的数据
> db.student.insert({"name":"小花","sex":"男"})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: test.student index: name_1 dup key: { name: \"灏忚姳\" }"
}
})
# 会直接报错,因为 小花 已经存在了
内容总结
以上是互联网集市为您收集整理的MongoDB基本语句练习全部内容,希望文章能够帮你解决MongoDB基本语句练习所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。