一、简介

MongoDB提供了db.collection.find() 方法可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段。

二.db.collection.find()查询数据

语法

      > db.collection.find(query,projection)

参数

类型

描述

query

document

可选. 使用查询操作符指定查询条件

projection

document

指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段

projection语法:

       { field1: <boolean>, field2: <boolean> ... }

说明:

1或者true表示返回字段

0或者false表示不返回该字段

_id:默认就是1,没指定返回该字段时,默认会返回,除非设置为0是,就不会返回该字段。

指定返回字段,有时文档字段多并数据大时,我们指定返回我们需要的字段,这样既节省传输数据量,减少了内存消耗,提高了性能,在数据大时,性能很明显的。

1.  查询数据

(1)返回集合中所有文档:

db.collection.find()

或者

db.collection.find({})

如同SQL语句:

SELECT * FROM TABLENAME

(2)指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段

语法:

          db.orders.find({},{field1: <boolean>, field2: <boolean> ... })

例子:

         >db.orders.find({},{"onumber":1,"cname":1})

而_id默认设置是1,所有也返回回来

可以设置_id不返回

例子:

      >db.orders.find({},{"onumber":1,"cname":1,"_id":0})

2. 根据条件查询

   (1)     等于条件查询

语法:

        >db.collect.find({<field1>: <value1>,<field2>: <value2>, ... })

例子:

       >db.orders.find({"onumber":"002"})

查找onumber=002的文档

  (2)     比较操作符

$gt(大于)、$gte(大于或等于)、 $lt(小于)、 $lte(小于或等于)

语法:

        { <field1>: { <expression1> },<field2>: {<expression1> }, ... }

1)$gt(大于)比较操作符

例子:

         >db.orders.find({"onumber":{$gt:"003"}})

我们查找onumber>003的值只有004

  2)$gte(大于或等于)与 $lte(小于或等于)联合查询并指定返回字段(通过第二参数)

例子:

          >db.orders.find({"onumber":{$gte:"002",$lte:"003"}},{"onumber":1,"cname":1})

我们查找002=<onumber<=003 并指定返回onumber和cname字段,而_id默认设置是1,所有也返回回来

(3) $or、和 $and 条件查询

   1)$and 条件查询

语法:

        { $and: [ { <expression1> }, { <expression2> } , ... , ]}

简单的用法的语法:

       { <field1>: <value1>,<field2>: <value2>, ...}

例子:

        >db.orders.find({"onumber":"002","cname":"zcy2"})

查找onumber=002 AND cname= zcy2 查询文档

   2)$or(或者)条件查询

语法:

       { $nor: [ { <expression1> }, { <expression2> }, ... ] }

例子:

       >db.orders.find({$or:[{"onumber":"002"},{"cname":"zcy1"}]})

我们条件onumber=002 OR cname= zcy1 查找只要符合onumber=002或者cname= zcy1条件的文档

3) $or 和$and 联合条件查询

例子:

      >db.orders.find({$and:[{"date":"2015-07-01"},{$or:[{"onumber":"002"},{"cname":"zcy1"}]}]})

查询条件 date=2015-07-01and (onumber=002 OR cname=zcy1) 的文档,就是既等如date等于2015-07-01 并且要满足onumber等于002或者cname等于zcy1其中一个就可以。

(4)$in(包含)、$nin(不包含)条件查询

 1)$in(包含)条件查询

 

语法:

          { field: { $in: [<value1>, < value2>, ...] } }

例子:

         >db.orders.find({"onumber":{$in:["001","002"]}})

查询onumber in("001","002") 条件的文档,就是onumber等于001或者等于002 这个跟$or有点像,不过$or做为条件查询时,可以指定不同的字段:  db.orders.find({$or:[{"onumber":"002"},{"cname":"zcy1"}]})

,而$in只针对一个字段。

   2)$nin(不包含)条件查询

语法:

         { field: { $nin: [<value1>, < value2>, ...] } }

$nin(不包含)跟$in(包含)相反的,这里就不做具体的介绍

(5)$not(不等于) 条件查询

语法:

     { field: { $not: { < expression1> } } }

$not操作符不能独立使用,必须跟其他操作条件一起使用(除$regex)

例子:

       >db.orders.find({"onumber":{$not:{$gt:"002"}}})

查找onumber不等于大于002的文档数据

(6)$exists用来判断一个field是否存在

语法:

      { field: { $ exists:  < boolean>  } }

例子:

      >db.orders.find({"age":{$exists:true}})

没有age这个元素,什么都没返回

插入有age元素,在执行一下

(7)$mod取模并等于指定的值

语法:

     { field: { $mod: [ value, value2 ]} }

对元素field值对value取模的,取模的值要value2的文档数据

例子:

      >db.orders.find({"age":{$mod:[5,1]}})

对age元素的值和5取模,取模的值要等于1的文档数据

(8)null 查找元素不存在和元素对应的值为null的文档

语法:

{ field: null }

例子:

      >db.orders.find({"age":null})

   1)      查找age元素存在并值等于null

         >db.orders.find({"age":{$in:[null],$exists:true}})

(9) $type来匹配一个元素的类型

语法:

{ field: { $type: < number >} }

number 是MongoDB中使用的类型对应的类型值

类型

类型值

Double

1

String

2

Object

3

Array

4

Binary data

5

Undefined (deprecated)

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

Max key

127

学习MongoDB 四: MongoDB查询(一)的更多相关文章

  1. Mongodb学习笔记四(Mongodb聚合函数)

    第四章 Mongodb聚合函数 插入 测试数据 ;j<;j++){ for(var i=1;i<3;i++){ var person={ Name:"jack"+i, ...

  2. MongoDB学习记录(四) - MongoDB的"增查改删"操作之"改"

    更新文档主要有以下几种方法: db.collection.updateOne(filter, update, options) db.collection.updateMany(filter, upd ...

  3. MYSQL初级学习笔记四:查询数据的操作DQL(SELECT基本形式)(26-35)

    知识点六:查询数据的操作DQL(SELECT基本形式)(26-35) CREATE DATABASE IF NOT EXISTS cms DEFAULT CHARACTER SET utf8; USE ...

  4. 转MYSQL学习(四) 查询

    MySQL中select的基本语法形式: select 属性列表 from 表名和视图列表 [where 条件表达式] [group by 属性名[having 条件表达式]] [order by 属 ...

  5. Entity Framework学习笔记(四)----Linq查询(1)

    请注明转载地址:http://www.cnblogs.com/arhat 从本章开始,老魏就介绍一下Entity Framework使用Linq来查询数据,也就是Linq To Entity.其实在E ...

  6. MongoDB (四) MongoDB 数据模型

    在 MongoDB 中的数据有灵活的模式.在相同集合中文档并不需要有相同的一组字段或结构的公共字段的集合,文档可容纳不同类型的数据. MongoDB设计模式的一些考虑 可根据用户要求设计架构. 合并对 ...

  7. MySQL学习(四)查询

    一.group_concat()函数.把groupby的分组中字段数据组合显示出来 select s_id , GROUP_CONCAT(要显示的字段名)  from table group by 分 ...

  8. PHP中的PDO操作学习(四)查询结构集

    关于 PDO 的最后一篇文章,我们就以查询结果集的操作为结束.在数据库的操作中,查询往往占的比例非常高.在日常的开发中,大部分的业务都是读多写少型的业务,所以掌握好查询相关的操作是我们学习的重要内容. ...

  9. MongoDB学习笔记四:索引

    索引就是用来加速查询的.创建数据库索引就像确定如何组织书的索引一样.但是你的优势是知道今后做何种查询,以及哪些内容需要快速查找.比如:所有的查询都包括"date"键,那么很可能(至 ...

  10. MongoDB学习【四】—pymongo操作mongodb数据库

    一.pymongodb的安装 Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 PyMongo 驱动来连接. pip安装 pip 是一个通用的 Python 包管理工具, ...

随机推荐

  1. 为什么要使用AOP

    首先,按照软件重构思想的理念,如果多个类中出现相同的代码,应该考虑定义一个共同的抽象类,将这些相同的代码提取到抽象类当中去.比如Horse.Pig.Camel这些对象都有run().eat()方法,通 ...

  2. OpenCV Error: Insufficient memory问题解析

    前言 项目程序运行两个月之久之后突然挂了,出现OpenCV Error: Insufficient memory的错误,在此分析一下该问题. 问题的表现形式: 程序内存使用情况: 问题: OpenCV ...

  3. UnicodeDammit

    UnicodeDammit 是BS内置库, 主要用来猜测文档编码. 编码自动检测 功能可以在Beautiful Soup以外使用,检测某段未知编码时,可以使用这个方法: from bs4 import ...

  4. js窗口拖动 模版

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  5. CTF-练习平台-Misc之 隐写2

    二.隐写2 下载文件后解压,发现是一个png图片,依照老套路查看属性,没有发现 用WinHex打开,在图片文件中,修改图片宽度,将箭头处的A改为F,保存后打开图片 发现flag(对于png的文件格式详 ...

  6. ES6必知必会 (三)—— 数组和对象的拓展

    数组的扩展 1.拓展运算符('...'),它相当于rest参数的逆运算,用于将一个数组转换为用逗号分隔的参数序列: console.log(...[1, 2, 3]) // 1 2 3 console ...

  7. adnanh webhook 框架 hook rule

    adnanh webhook 支持一系列的逻辑操作 AND 所有的条件都必须匹配 { "and": [ { "match": { "type" ...

  8. TensorFlow笔记-02-Windows下搭建TensorFlow环境(win版非虚拟机)

    TensorFlow笔记-02-Windows下搭建TensorFlow环境(win版非虚拟机) 本篇介绍的是在windows系统下,使用 Anaconda+PyCharm,不使用虚拟机,也不使用 L ...

  9. jquery.ellipsis根据宽度(不是字数)进行内容截断,支持多行内容

    jquery.ellipsis 自动计算内容宽度(不是字数)截断,并加上省略号,内容不受中英文或符号限制. 如果根据字数来计算的话,因为不同字符的宽度并不相同,比如l和W,特别是中英文,最终内容宽度会 ...

  10. JavaScript中类似PHP的uniqid()方法

    JavaScript中类似PHP的uniqid()方法: function generateUIDNotMoreThan1million() { return ("0000" + ...