1.简单查询:

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

语法

MongoDB 查询数据的语法格式如下:      collection是集合名字,注意应该是当前数据库的集合,collection也可以换为getCollection('colle_name')

db.collection.find(query, projection)
  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

>db.col.find().pretty()

pretty() 方法以格式化的方式来显示所有文档。

例子:

(1)简单的查询所有:

> db.colle1.find()
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 25 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 25 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }

(2)简单的查询单个:

> db.colle1.findOne()
{
"_id" : ObjectId("5ab482095114c7b7fd6e83d9"),
"name" : "qlq1",
"age" : 25
}

注意:如果在DOS窗口需要美化查询结果可以加pretty()函数(此函数不能用于查询单个)

> db.colle1.find().pretty()
{
"_id" : ObjectId("5ab482095114c7b7fd6e83d9"),
"name" : "qlq1",
"age" : 25
}
{
"_id" : ObjectId("5ab4820d5114c7b7fd6e83da"),
"name" : "qlq12",
"age" : 25
}
{
"_id" : ObjectId("5ab482105114c7b7fd6e83db"),
"name" : "qlq13",
"age" : 25
}
{
"_id" : ObjectId("5ab482135114c7b7fd6e83dc"),
"name" : "qlq14",
"age" : 25
}
{
"_id" : ObjectId("5ab482475114c7b7fd6e83dd"),
"name" : "qlq15",
"age" : 25
}
>

2.按条件查询:

数据:

> db.colle1.find()
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }

(1)MongoDB 与 RDBMS Where 语句比较

如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

操作 格式 范例 RDBMS中的类似语句
等于 {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

例如:查询名字为qlq1的信息

db.getCollection('colle1').findOne({name:'qlq1'})

查询年龄大于25 的:

db.getCollection('colle1').find({age:{$gte:25}})

查询年龄大于25并且名字为qlq13的:  (AND条件查询)

db.getCollection('colle1').find({age:{$gte:25},name:'qlq13'})

(2)MongoDB AND 条件

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

语法格式如下:

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

例子:

查询年龄大于25并且名字为qlq13的:  (AND条件查询)

db.getCollection('colle1').find({age:{$gte:25},name:'qlq13'})

(3)MongoDB OR 条件

MongoDB OR 条件语句使用了关键字 $or,语法格式如下:

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

例如:

查询名字为qlq或者名字为qlq1的人的信息:

db.getCollection('colle1').find({$or:[{name:'qlq1'},{name:'qlq13'}]})

(4)AND 和 OR 联合使用

例如:下面语句类似于关系型数据库的:

  where age=25 and (name='qlq1' or name='qlq13')

db.getCollection('colle1').find({$or:[{name:'qlq1'},{name:'qlq13'}],age:25})

(5)范围运算符查询:

使用  "$in"  或者  "nin"判断是否在某个范围内

例如:查询年龄在20,25范围内的信息。

db.getCollection('colle1').find({age:{$in:[20,25]}})

查询年龄不在20,25范围内的信息。

db.getCollection('colle1').find({age:{$nin:[20,25]}})

(6)正则表达式(类似于JS的功能)

  •   使用//或者使用$regex编写正则表达式

例如:查询name以qlq12开头的人的信息:

db.getCollection('colle1').find({name:/^qlq12/})
db.getCollection('colle1').find({name:{$regex:'^qlq12'}})

(7)自定义查询:

  • 使用$where后面编写一个函数,返回满足条件的数据:

例如:查询年龄大于等于25的学生:

db.getCollection('colle1').find({$where:function(){return this.age>=25}})
db.getCollection('colle1').find({$where:function(){return this.name.indexOf('qlq12')==0}})

  上面的mongodb的函数都是JS函数,因此可以参考JS函数即可完成各种查询。

3.MongoDB Limit与Skip方法  用于分页查询

数据:

> db.colle1.find()
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }

MongoDB Limit() 方法    取几条

如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

语法

limit()方法基本语法如下所示:

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

例如::取前两条数据

> db.colle1.find().limit(2)
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }

MongoDB Skip() 方法  跳过几条

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

语法

skip() 方法脚本语法格式如下:

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

例如:跳过两条取后三条

> db.colle1.find().skip(2)
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }

两个结合实现分页:

例如:每页2条,现在取第二页

> db.colle1.find().skip(1*2).limit(2)
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }

4.映射指定列:(投影筛选)   find方法的第二个参数

  选择一条数据的指定的列,而不需要全部的列。

不写的活默认索引列出来

> db.colle1.find({},{})
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }

或者:

> db.colle1.find({},{name:1,_id:0,age:1})
{ "name" : "qlq1", "age" : 20 }
{ "name" : "qlq12", "age" : 25 }
{ "name" : "qlq13", "age" : 25 }
{ "name" : "qlq14", "age" : 50 }
{ "name" : "qlq15", "age" : 25 }
>

例如:只显示name列

> db.colle1.find({},{name:1})
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1" }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12" }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13" }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14" }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15" }

如果也不想ID列出来:

> db.colle1.find({},{name:1,_id:0})
{ "name" : "qlq1" }
{ "name" : "qlq12" }
{ "name" : "qlq13" }
{ "name" : "qlq14" }
{ "name" : "qlq15" }
>

5.排序 sort()方法

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

语法

sort()方法基本语法如下所示:

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

例如:按年龄降序排序查询人的信息

> db.getCollection('colle1').find({}).sort({age:-1})
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }

例如:按年龄降序升序序查询人的信息

> db.getCollection('colle1').find().sort({age:1})
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }

注意:

  skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。

6.统计个数:   count()方法

  • 语法:
db.collection.find({条件}).count()

或者

db.collection.count({条件})
  • 例如:统计年龄大于25的员工人数

第一种:

> db.getCollection('colle1').count({age:{$gte:25}})
4

第二种:

> db.getCollection('colle1').find({age:{$gte:25}}).count()
4

7.去除重复数据:  distinct()方法

  此方法返回去重字段在集合中一共有几种值

  • 语法:
db.collection.distinct('去重字段',{条件})

例如:

> db.getCollection('colle1').distinct('age',{})
[ 20, 25, 50 ]

8.   $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

MongoDB 中可以使用的类型如下表所示:

类型 数字 备注
Double 1  
String 2  
Object 3  
Array 4  
Binary data 5  
Undefined 6 已废弃。
Object id 7  
Boolean 8  
Date 9  
Null 10  
Regular Expression 11  
JavaScript 13  
Symbol 14  
JavaScript (with scope) 15  
32-bit integer 16  
Timestamp 17  
64-bit integer 18  
Min key 255 Query with -1.
Max key

例如:

数据:

> db.exam.find()
{ "_id" : ObjectId("5ab8ae0d807bacd3133efcf6"), "name" : "qlq", "age" : 25 }
{ "_id" : ObjectId("5ab8ae13807bacd3133efcf7"), "name" : "qlq", "age" : true }

现在查询age的类型是boolean类型的数据:

> db.getCollection('exam').find({"age":{$type : 8}})
{ "_id" : ObjectId("5ab8ae13807bacd3133efcf7"), "name" : "qlq", "age" : true }

mongoDB的文档查询的更多相关文章

  1. MongoDB入门---文档查询操作之条件查询&and查询&or查询

    经过前几天的学习之路,今天终于到了重头戏了.那就是文档查询操作.话不多说哈,直接看下语法: db.collection.find(query, projection) query :可选,使用查询操作 ...

  2. MongoDB入门---文档查询之$type操作符&limit方法&skip方法&简单排序(sort)操作

    上一篇文章呢,已经分享过了一部分查询操作了,这篇文章呢?就来继续分享哈.接下来呢我们直接看MongoDB中的$type操作符哈.它呢是基于BSON类型来检索集合中匹配的数据类型,并且返回结果,在Mon ...

  3. MongoDB快速入门学习笔记4 MongoDB的文档查询操作

    先把student删除,再重新插入数据 > db.student.drop() true > db.student.insert([{ "_id" : 1, " ...

  4. MongoDB多文档查询

    db.getCollection('transactionCompensation').find( { "$and":[ { "status":{ " ...

  5. SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”

    一.简介 spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...

  6. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)

    一.简单介绍 Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...

  7. Spring Data MongoDB 三:基本文档查询(Query、BasicQuery

    一.简介 spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...

  8. Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)

    Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...

  9. MongoDB数据库文档操作

    前面的话 本文将详细介绍MongoDB数据库关于文档的增删改查 数据类型 在介绍文档操作之前,首先要了解MongoDB的数据类型 MongoDB支持许多数据类型,包括 1.字符串 - 这是用于存储数据 ...

随机推荐

  1. C#文件重命名的代码

    C#中没有重命名的方法,自己写了一个方法,来处理文件的重命名. /// <summary> /// 重命名文件夹内的所有子文件夹 /// </summary> /// < ...

  2. 「题目代码」P1029~P1033(Java)

    1029 C基础-求解方程 import java.util.*; import java.io.*; import java.math.BigInteger; public class Main { ...

  3. 用jsp实现省市区三级联动下拉

    jsp+jquery实现省市区三级联动下拉 不少系统都需要实现省市区三级联动下拉,像人口信息管理.电子商务网站.会员管理等,都需要填写地址相关信息.而用ajax实现的无刷新省市区三级联动下拉则可以改善 ...

  4. packstack安装ironic

    KVM Centos7.3虚机 安装openstack Pike版本, 其它版本安装方法类似. packstack目前对NetworkManager 还不支持,我们修改下配置: systemctl d ...

  5. 使用JDK的keytool生成Android签名证书

    生成证书:keytool -genkey -alias [yourapp] -keyalg RSA -validity 20000 -keystore [yourapp].keystore 输入key ...

  6. 【python】Python中给List添加元素的4种方法分享

    List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持着初始时的定义的顺序(除非你对它们进行排序或其他修改操作). 在Python中,向List添加元素,方法有如下4种方法 ...

  7. 【bzoj3362/3363/3364/3365】[Usaco2004 Feb]树上问题杂烩 并查集/树的直径/LCA/树的点分治

    题目描述 农夫约翰有N(2≤N≤40000)个农场,标号1到N,M(2≤M≤40000)条的不同的垂直或水平的道路连结着农场,道路的长度不超过1000.这些农场的分布就像下面的地图一样, 图中农场用F ...

  8. SRM710 div1 ReverseMancala(trick)

    题目大意, 给定一个有n个点的环,n不超过10,每个点上有一个权重 起始时权重将会给出,然后有2种操作 第一种操作是,选择一个位置i,获得权重w = a[i],把a[i]变成0,然后接下来在环上顺着走 ...

  9. Powershell使用真实的对象工作

    Powershell使用真实的对象工作 来源 https://www.pstips.net/powershell-work-with-reallife-objects.html 每一个Powershe ...

  10. 【题解】HAOI2008硬币购物

    1A什么的实在是太开心啦~~洛谷P1450 这道题目主要是考察对于容斥原理的掌握. 首先,注意到如果不存在有关硬币数量的限制而单纯询问方案的总数,就是一个简单的完全背包.这个思路提醒我们:如果能够求出 ...