经过前几天的学习之路,今天终于到了重头戏了。那就是文档查询操作。话不多说哈,直接看下语法:

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

    这里还有一种读取的方式,是格式化显示数据的,看一下语法:

>db.luyaran.find().pretty()

    好啦,大家来看一下实例,比较容易理解:

> db.luyaran.find().pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "luyaran",
"url" : "http://www.luyaran.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}

    看到区别了么,和昨天的查询相比较的话,这种方式的查询展示数据格式比较清晰,还有就是findOne()这种查询呢,可以只展示我们查询出来的第一条数据。接下来呢,就轮到条件查询了,首先我们要说的就是比较查询,先来看一下和mysql中的比较符号的区别:

操作 格式 范例 RDBMS中的类似语句
等于 {<key>:<value>} db.col.find({"by":"luyaran"}).pretty() where by = 'luyaran'
小于 {<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

    还有呢就是我们的and查询了,MongoDB的find()查询可以传入多个键值,以逗号隔开就是我们平常用的and多条件查询了。大家来看一下语法:

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

    下面的就是实例了:

> db.luyaran.find({"by":"luyaran", "title":"MongoDB 教程"}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "luyaran",
"url" : "http://www.luyaran.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
} //类似于 where by = 'luyaran' and title = 'MongoDB 教程'

    再来就是我们的or查询喽,看一下语法:

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

    看一下实例感受一下:

>db.luyaran.find({$or:[{"by":"luyaran"},{"title": "MongoDB 教程"}]}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "luyaran",
"url" : "http://www.luyaran.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}
>

    接下来看一下or和and的组合使用:

>db.luyaran.find({"likes": {$gt:50}, $or: [{"by": "luyaran"},{"title": "MongoDB 教程"}]}).pretty()
{
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "luyaran",
"url" : "http://www.luyaran.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100
}

    到这里呢,查询就差不多了,接下来继续进入今天的重头戏条件操作符的使用。不做过多的赘述了,看实例哈:

    首先,我们先清除luyaran这个集合中的所有数据:

db.luyaran.remove({})

    然后呢,我们插入以下数据:

>db.luyaran.insert({
title: 'PHP 教程',
description: 'PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。',
by: 'luyaran',
url: 'http://www.luyaran.com',
tags: ['php'],
likes: 200
})
>db.luyaran.insert({title: 'Java 教程',
description: 'Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。',
by: 'luyaran',
url: 'http://www.luyaran.com',
tags: ['java'],
likes: 150
})
>db.luyaran.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'luyaran',
url: 'http://www.luyaran.com',
tags: ['mongodb'],
likes: 100
})

    接下来我们使用find来查看一下当前集合中所含有的数据:

> db.luyaran.find()
{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "luyaran", "url" : "http://www.luyaran.com", "tags" : [ "php" ], "likes" : 200 }
{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "luyaran", "url" : "http://www.luyaran.com", "tags" : [ "java" ], "likes" : 150 }
{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "luyaran", "url" : "http://www.luyaran.com", "tags" : [ "mongodb" ], "likes" : 100 }

    然后就开始查询喽,先来一个likes大于100的:

db.luyaran.find({"likes" : {$gt : 100}})  //类似于select * from luyaran where likes > 100

    输出的结果集为:

> db.luyaran.find({"likes" : {$gt : 100}})
{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "luyaran", "url" : "http://www.luyaran.com", "tags" : [ "php" ], "likes" : 200 }
{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "luyaran", "url" : "http://www.luyaran.com", "tags" : [ "java" ], "likes" : 150 }
>

    再来一个likes大于等于100的:

db.luyaran.find({likes : {$gte : 100}}) //类似于select * from luyaran where likes >= 100

    输出的结果集为:

> db.luyaran.find({likes : {$gte : 100}})
{ "_id" : ObjectId("56066542ade2f21f36b0313a"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "luyaran", "url" : "http://www.luyaran.com", "tags" : [ "php" ], "likes" : 200 }
{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "luyaran", "url" : "http://www.luyaran.com", "tags" : [ "java" ], "likes" : 150 }
{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "luyaran", "url" : "http://www.luyaran.com", "tags" : [ "mongodb" ], "likes" : 100 }
>

    然后呢,再来一个小于150的:

db.luyaran.find({likes : {$lt : 150}}) //类似于select * from luyaran where likes < 150

    输出的结果集为:

> db.luyaran.find({likes : {$lt : 150}})
{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "luyaran", "url" : "http://www.luyaran.com", "tags" : [ "mongodb" ], "likes" : 100 }

    还有就是小于等于150的:

db.luyaran.find({likes : {$lte : 150}}) //类似于select * from luyaran where likes <= 150

    输出的结果集为:

> db.luyaran.find({likes : {$lte : 150}})
{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "luyaran", "url" : "http://www.luyaran.com", "tags" : [ "java" ], "likes" : 150 }
{ "_id" : ObjectId("5606654fade2f21f36b0313c"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "luyaran", "url" : "http://www.luyaran.com", "tags" : [ "mongodb" ], "likes" : 100 }

    最后再来一个区间的哈,大于100小于200的:

db.luyaran.find({likes : {$lt :200, $gt : 100}}) //类似于select * from luyaran where likes > 100 and likes <200

    输出的结果集为:

> db.luyaran.find({likes : {$lt :200, $gt : 100}})
{ "_id" : ObjectId("56066549ade2f21f36b0313b"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "luyaran", "url" : "http://www.luyaran.com", "tags" : [ "java" ], "likes" : 150 }
>

    好啦,今天的分享到这里就差不多结束了。后续的还有好多查询方式,待我融会贯通后,定会记录下来与诸君分享。

    另外,再次声明哈,这是本人学习笔记,各位看官勿喷哈。

    如果觉得不错的,欢迎诸位点赞支持哈。。。

   原文链接:https://blog.csdn.net/luyaran/article/details/79711560

MongoDB入门---文档查询操作之条件查询&and查询&or查询的更多相关文章

  1. MongoDB .Net Driver(C#驱动) - 内嵌数组/嵌入文档的操作(增加、删除、修改、查询(Linq 分页))

    目录 一.前言 1. 运行环境 二.前期准备工作 1. 创建 MongoDBContext MongoDb操作上下文类 2.创建测试类 3.创建测试代码 三.内嵌数组增加元素操作 1.Update.S ...

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

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

  3. MongoDB入门---文档操作之增删改

    之前的两篇文章,已经分享过关于MongoDB的集合还有数据库的各种操作,接下来就涉及到最主要的喽,那就是数据方面的操作,在这里叫做文档操作.话不多说,大家来看正文.     首先来看一下它的数据结构: ...

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

    1.文档的数据存储格式为BSON,类似于JSON.MongoDB插入数据时会检验数据中是否有“_id”,如果没有会自动生成.shell操作有insert和save两种方法.当插入一条数据有“_id”值 ...

  5. MongoDB对文档的操作

    插入文档 db.COLLECTION_NAME.insert({doc1},{doc2},...) e.g.:db.collection.insert({name:'123',age:12},{nam ...

  6. MongoDB快速入门学习笔记5 MongoDB的文档修改操作

    db.集合名称.update({query},{update},upsert, multi})query:过滤条件update:修改内容upsert:如果不存在查询条件查出的记录,是否插入一条数据,默 ...

  7. MongoDB快速入门学习笔记6 MongoDB的文档删除操作

    db.集合名称.remove({query}, justOne)query:过滤条件,可选justOne:是否只删除查询到的第一条数据,值为true或者1时,只删除一条数据,默认为false,可选. ...

  8. MongoDB数据库、集合、文档的操作

    MongoDB系列第一课:MongDB简介 MongoDB系列第二课:MongDB环境搭建 MongoDB系列第三课:MongDB用户管理 MongoDB系列第四课:MongoDB数据库.集合.文档的 ...

  9. MongoDB模拟多文档事务操作

    Mongodb不支持多文档原子性操作,因此依据两阶段提交协议(Two Phase Commits protocol)来模拟事务. 以两个银行账户之间的转账行为为例,来说明如何实现多文档间的事务操作. ...

随机推荐

  1. 在Ubuntu16.04.4上安装docker

    在Ubuntu16.04.4上安装docker 一.环境准备     首先我们需要一台Ubuntu16.04 虚拟机或者真机,其次,我们对其进行环境配置.       1.1.移除已经安装过的dock ...

  2. !important 语法

    语法: Selector{sRule!important;} 说明: 提升指定样式规则的应用优先权. IE6及以下浏览器有个比较显式的支持问题存在,!important并不覆盖掉在同一条样式的后面的规 ...

  3. Java日志系统

    前言 各组件之间的关系: slf4j是The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它本身只提供了日志Facade API和一个简单的日志类实 ...

  4. c++ nested class 嵌套类。

    c++ primer 658页 嵌套类最常用于定义执行类,

  5. Oracle中序列的操作以及使用前对序列的初始化

    Oracle中序列的操作以及使用前对序列的初始化   一 创建序列 create sequence myseq start with 1 increment by 1 nomaxvalue minva ...

  6. UVa 1638 - Pole Arrangement(dp)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  7. VBS小脚本_ 玩坏键盘的指示灯

    代码简单,功能好玩,富有趣味 set ws=wscript.createobject("wscript.shell") do wscript.sleep ws.sendkeys&q ...

  8. Mybatis 和Spring整合之mapper代理开发

    F:\1ziliao\mybatis\代码 1.1 SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8&quo ...

  9. 学习“CC攻击”

    什么是CC攻击? 网上有一个定义:攻击者借助代理服务器生成指向受害主机的合法请求,实现拒绝服务攻击的攻击方式称为CC(Challenge Collapsar)攻击.[据说CC的原意为Chanlleng ...

  10. Tomcat生命周期

    来源 本文整理自 <Tomcat内核设计剖析>.<Tomcat结构解析> Lifecycle接口 ​ Lifecycle接口统一管理Tomcat生命周期.一共做了4件事: 定义 ...