mongodb学习(查询详解)

在前面几篇博客当中学习到了修改的详细操作,可是对于查询却一直是查询所有的记录,这篇文章将会带大家详细学习查询的操作。

查询指定字段
在进行正式的学习之前,我先将需要的数据插入数据库中,如下:

var students= [{
    name:"jim",
    age:25,
    email:"75431457@qq.com",
    c:89,m:96,e:87,
    country:"USA",
    books:["JS","C++","EXTJS","MONGODB"]
},
{
    name:"tom",
    age:25,
    email:"214557457@qq.com",
    c:75,m:66,e:97,
    country:"USA",
    books:["PHP","JAVA","EXTJS","C++"]
},
{
    name:"lili",
    age:26,
    email:"344521457@qq.com",
    c:75,m:63,e:97,
    country:"USA",
    books:["JS","JAVA","C#","MONGODB"]
},
{
    name:"zhangsan",
    age:27,
    email:"2145567457@qq.com",
    c:89,m:86,e:67,
    country:"China",
    books:["JS","JAVA","EXTJS","MONGODB"]
},
{
    name:"lisi",
    age:26,
    email:"274521457@qq.com",
    c:53,m:96,e:83,
    country:"China",
    books:["JS","C#","PHP","MONGODB"]
},
{
    name:"wangwu",
    age:27,
    email:"65621457@qq.com",
    c:45,m:65,e:99,
    country:"China",
    books:["JS","JAVA","C++","MONGODB"]
},
{
    name:"zhaoliu",
    age:27,
    email:"214521457@qq.com",
    c:99,m:96,e:97,
    country:"China",
    books:["JS","JAVA","EXTJS","PHP"]
},
{
    name:"piaoyingjun",
    age:26,
    email:"piaoyingjun@uspcat.com",
    c:39,m:54,e:53,
    country:"Korea",
    books:["JS","C#","EXTJS","MONGODB"]
},
{
    name:"lizhenxian",
    age:27,
    email:"lizhenxian@uspcat.com",
    c:35,m:56,e:47,
    country:"Korea",
    books:["JS","JAVA","EXTJS","MONGODB"]
},
{
    name:"lixiaoli",
    age:21,
    email:"lixiaoli@uspcat.com",
    c:36,m:86,e:32,
    country:"Korea",
    books:["JS","JAVA","PHP","MONGODB"]
},
{
    name:"zhangsuying",
    age:22,
    email:"zhangsuying@uspcat.com",
    c:45,m:63,e:77,
    country:"Korea",
    books:["JS","JAVA","C#","MONGODB"]
}]

之后我们执行如下for循环,批量插入这些数据:

for(var i = 0;i<students.length;i++){
    db.students.insert(students[i])
}

这里写图片描述
这里写图片描述

字段查询

可以看到,此时我的所有数据都已经插入进去了。下面我来实现只查询部分字段,其实很简单,比如我只想查询name和email字段:
可以这样写:“db.students.find({},{name:1,email:1})”
db.documentName.find({条件},{键指定})
如下图:
这里写图片描述
可以看到,系统在查询name和email把”_id”也默认给我们查询出来了,如果不想查询出默认的”_id”字段,可以这样写:“db.students.find({},{_id:0,name:1,email:1})”
这里写图片描述

可是这里我们是查询的所有,第一个{}是用来填写查询条件的,如果我们需要按照条件查询,就可以将条件写到这里。先看看mongodb中的常用比较操作符:
这里写图片描述

比较查询

比如我查询age和name字段,条件是age>=27&&age <25
这里写图片描述
查询不是中国的学生:
这里写图片描述

包含或不包含 in nin查询

查询国籍是中国或美国的学生
这里写图片描述
查询国籍不是中国或美国的学生
这里写图片描述

or查询

查询语文成绩>85或者英语成绩>90的学生
这里写图片描述

null查询

把中国国籍的学生增加新的键”sex”,查询出sex=null的学生
这里写图片描述

正则查询

查询名字中存在”li”的学生信息
这里写图片描述

not的使用

$not可以用于任何地方的取反操作
查询出名字中不存在”li”的学生的信息
这里写图片描述

数组查询$all和index应用

查询出喜欢看MONGOD和JS的学生
这里写图片描述
查询第二本书是JAVA的学生信息
这里写图片描述
这里注意,由于我们是查询第二本书,所以其索引是1。

查询指定数组长度$size

注意:$size不能与比较查询符一起使用
查询出喜欢的书籍数量是4本的学生
这里写图片描述

查询出喜欢的书籍数量>3本的学生
1.增加字段size
db.students.update({},{set:{size:4}},false,true)  
2.改变书籍的更新方式,每次增加一本书,对应的size+1  
db.students.update({name:”tom”},{
push:{books:"linux"},$inc:{size:1}})
可以看到,我在这里为tom增加了一本书籍
3.查询书籍的数量是5的学生
db.students.find({size:5},{_id:0,name:1,age:1})
4.查询tom喜欢看的书的总数
这里写图片描述

$slice操作

$slice操作符返回文档中指定数组的内部值
查询tom喜欢的2~4本书
这里写图片描述
查询tom喜欢的最后一本书
这里写图片描述

$where查询

复杂的查询就可以使用where,但是要尽量避免使用它,因为这个是比较耗性能的。
查询年龄是22岁的student的姓名:
这里写图片描述
从图中可以看出,由于有好几个student的age==27.所以需要使用while来循环遍历结果。

limit分段查询

查询出students文档中前五条数据
这里写图片描述
skip返回指定数据的跨度
查询出student文档中第5~10条数据
这里写图片描述
sort排序查询
查询出第5~10条数据,按照年龄排序
这里写图片描述

count查询

查询students集合中美国学生的人数

db.students.find({country:"USA"}).count()

distinct去重查询

查询students集合中,一共有多少个国家
这里写图片描述

group分组查询

语法:

db.runCommand({group:{
    ns:集合名称,
    key:分组的键
    initial:初始化累加器,
    $reduce:组分解器,
    Condition:条件,
    Finallize:组完成器
}})

比如:
查询出students集合中,每个国家中数学成绩最好的学生信息

db.runCommand({group:{
    ns:"students",
    key:{"country":true},
    initial:{m:0},
    $reduce:function(doc,prev) {
        if(doc.m > prev.m) {
            prev.m = doc.m;
            prev.name = doc.name;
            prev.country = doc.country;
        }
    },
    condition:{m:{$gt:90}}
}})

这里写图片描述
如果需要让数学成绩显示的更加详细一点,可以在加上组完成器,来自定义显示信息:

db.runCommand({group:{
    ns:"students",
    key:{"country":true},
    initial:{m:0},
    $reduce:function(doc,prev) {
        if(doc.m > prev.m) {
            prev.m = doc.m;
            prev.name = doc.name;
            prev.country = doc.country;
        }
    },
    finalize:function(prev) {
        prev.m = prev.name+"数学成绩:"+prev.m
    },
    condition:{m:{$gt:90}}
}})

这里写图片描述

查询mongodb为我们提供的命令

1.根据命令查询:

db.listCommands()

2.根据网址查询:
http://127.0.0.1:28017/_commands
注意:如果该网址不能访问,是因为在配置mongodb启动的时候,没有加上”–rest” 选项,需要加上该选项,在重新启动mongodb,如下:

mongod --dbpath D:\mongodbData --rest

这里写图片描述

常用命令 ##、

1.查询服务器版本号与主机操作系统

db.runCommand({buildInfo:1})

这里写图片描述
2.查询集合的详细信息

db.runCommand({collStats:"students"})

这里写图片描述
3.查看操作集合的最后一条错误信息

db.runCommand(getLastError:"students")

关于mongodb查询的学习,就到这里了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的Java程序,演示如何使用MongoDB Java驱动程序进行查询。 首先,您需要使用Maven或Gradle等工具将MongoDB Java驱动程序添加到您的项目中。然后,您需要创建一个MongoClient实例,该实例表示与MongoDB服务器的连接。 ``` MongoClient mongoClient = new MongoClient("localhost", 27017); ``` 接下来,您需要选择一个数据库并创建一个MongoDatabase实例。 ``` MongoDatabase database = mongoClient.getDatabase("myDatabase"); ``` 然后,您可以选择一个集合并创建一个MongoCollection实例。 ``` MongoCollection<Document> collection = database.getCollection("myCollection"); ``` 现在,您可以使用MongoCollection实例执行各种查询。例如,以下代码将查询集合中所有文档的数量。 ``` long count = collection.countDocuments(); System.out.println("Total documents in collection: " + count); ``` 您还可以使用MongoCollection实例执行更复杂的查询。例如,以下代码将查询集合中年龄大于30的所有文档。 ``` Document query = new Document("age", new Document("$gt", 30)); List<Document> results = collection.find(query).into(new ArrayList<>()); for (Document doc : results) { System.out.println(doc.toJson()); } ``` 在上面的代码中,我们使用一个查询文档来指定查询条件,然后使用find()方法执行查询。我们使用into()方法将查询结果转换为一个ArrayList。 以上是一个简单的MongoDB Java查询的例子,您可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值