MongoDB 查询操作(上)(二)

一、简介

MongoDB提供了db.collection.find() 方法是查询集合中文档并返回结果为游标的文档集合和db.collection.findOne()方法是只返回其中的第一条记录,而不是返回游标的文档集合。

db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段。并返回到匹配文档的游标。可以随意修改查询限制、跳跃、和排序顺序的功能。

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

语法

<span style="font-size:18px;"> db.collection.find(query,projection)</span>

参数


类型


描述


query


document


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


projection


document


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

projection语法:

<span style="font-size:18px;">{ field1: <boolean>, field2: <boolean> ... }</span>

说明:

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

2.对数组根据条件查询

$all、$size、$where、$slice、$elemMatch

(1)$all查找数组中包含指定的值的文档

语法:

{ field:{ $all: [ <value> , <value1> ... ]}

例子:

db.orders.find({"books":{$all:["java","mongo"]}})

查找books包含java、mongo的文档数据

(2)$size 查找数组大小等于指定值的文档

语法:

    {field: {$size: number } }

例子:

    db.orders.find({"books":{$size:2}})

(3)$slice查询数组中指定返回元素的个数

语法:

         db.collect.find({},{field:{$slice: number }})

number 说明:

为正数表示返回前面指定的值的个数:例如1 返回数组第一个

为负数表示返回倒数指定的值的个数:例如-1返回数组倒数第一个

例子:

       db.orders.find({"onumber":{$in:["008","009"]}},{books:{$slice:1}})

  1)$slice可以查询数组中第几个到第几个

语法:

        db.collect.find({},{field:{$slice:[ number1, number2] }})

跳过数组的number1个位置然后返回number2个数

number1说明:

为正数表示跳到指定值的数组个数:例如2 跳到数组第3个

为负数表示跳到指定值的数组倒数个数:例如-2跳到到数组倒数第3个

例子:

        db.orders.find({"onumber":{$in:["008","009"]}},{books:{$slice:[1,1]}})

跳过books数组第一个元素,现在到数组第二个元素,并返回1个元素

3、对数组内嵌文档查询

db. orders.insert([
{
        "onumber" : "001",
        "date" : "2015-07-02",
        "cname" : "zcy1",
         "items" :[ {
                   "ino" : "001",
                  "quantity" :2,
                  "price" : 4.0
                 },{
                   "ino" : "002",
                  "quantity" : 4,
                  "price" : 6.0
                }
                ]
},{
         "onumber" : "002",
        "date" : "2015-07-02",
        "cname" : "zcy2",
         "items" :[ {
                  "ino" : "001",
                  "quantity" :2,
                  "price" : 4.0
                   },{
                  "ino" : "002",
                  "quantity" :6,
                  "price" : 6.0
                 }
               ]
}
])

(1)$elemMatch 文档包含有一个元素是数组,那么$elemMatch可以匹配内数组内的元素并返回文档数据

语法:

       {field:{$elemMatch:{ field1:value1, field2:value2,………}}}

例子:

    db.orders.find({"items":{$elemMatch:{"quantity":2}}})

返回quantity为2的文档

也可以这样查询db.orders.find({"items.quantity":2})

2) $elemMatch可以带多个查询条件

例子:

   db.orders.find({"items":{$elemMatch:{"quantity":4,"ino":"002"}}}) 

我们查询数组中的quantity等于4并且ino等于002,但是我们就想返回数组中的quantity等于4并且ino等于002的这个文档,并不想把ino等于001等这些无关的文档返回。

3)$elemMatch 同样可以用在find方法的第二个参数来限制返回数组内的元素,只返回我们需要的文档

例子:

db.orders.find({"onumber":"001"},{"items":{$elemMatch:{"quantity":4,"ino":"002"}},"cname":1,"date":1,"onumber":1})

我们只返回quantity等于4并且ino等于002的文档,无关的文档没有返回,方便我们处理数据,这样也可以节省传输数据量,减少了内存消耗,提高了性能,在数据大时,性能很明显的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 21:22:07

MongoDB 查询操作(上)(二)的相关文章

.NET下对MongoDB进行操作(二)

这次说下关于利用C#driver,对mongoDB进行简单的查询. 我们可以利用Query类中的静态方法来创建一系列query,达到查询的目的. Query在using MongoDB.Driver.Builders这一名称空间中. 1. 单一条件查询,可以参考如下代码: var query = Query.EQ("ColName", "Value"); foreach (BsonDocument doc in collection.Find(query)) { D

MongoDB查询操作限制返回字段的方法

这篇文章主要介绍了MongoDB查询操作限制返回字段的方法,需要的朋友可以参考下 映射(projection )声明用来限制所有查询匹配文档的返回字段.projection以文档的形式列举结果集中要包含或者排除的字段.可以指定要包含的字段(例如: {field:1})或者指定要排除的字段(例如:{field:0}).默认_id是包含在结果集合中的,要从结果集中排除_id字段,需要在 projection中指定排除_id字段({_id:0}).除了_id字段,不能在一个projection中联合使

MongoDB查询操作

1 数据准备 var persons = [{ name:"jim", age:25, email:"[email protected]", c:89,m:96,e:87, country:"USA", books:["JS","C++","EXTJS","MONGODB"]},{ name:"tom", age:25, email:"[

django结合mongoengine实现对mongodb的操作(二)

1. 获取数据 for post in Post.objects: print(post.title) for post in Post.objects:    print(post.title)    print('=' * len(post.title))     if isinstance(post, TextPost):        print(post.content)     if isinstance(post, LinkPost):        print('Link: {}

【翻译】MongoDB指南/CRUD操作(二)

[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关注),写确认(写关注) 1 更新文档 1.1 更新 MongoDB提供下列方法用于更新一个集合 db.collection.updateOne() 更新使用指定过滤器匹配到的文档,即使过滤器匹配到多个文档,也只会更新一个文档. 3.2版本新增特性. db.collection.updateMany(

Mongodb基础用法及查询操作[转载]

插入多条测试数据> for(i=1;i<=1000;i++){... db.blog.insert({"title":i,"content":"mongodb测试文章.","name":"刘"+i});                                                      ... } db.blog.list.find().limit(10).forEach(

数据库表的查询操作(实验二),数据库表查询实验

[实验目的]:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识.[实验要求]:掌握利用Select语句进行各种查询操作:单表查询.多表连接及查询.嵌套查询.集合查询等.[实验内容]一.单表查询1.简单查询打开查询分析器,根建立teacher表,并加入数据.从teacher表中分别检索出教师的所有信息,以及仅查询教工号.姓名和职称.语句如下: select * from teacher select tno, tname from teacher 如要查询时改变列标题的显示,则从te

MongoDB的查询操作

1. 前言 在这篇博文中,我们将学习如何查询mongoDB中的数据.当我们把数据存储在mongoDB以后,我们需要把数据查询出来.毕竟CRUD操作中,查询操作在我们系统中是我们应用比较频繁的操作.我们需要应对不同的业务需求,构造合适的查询条件去查询我们想要的数据.我们需要去学习mongoDB给我们提供了哪些查询相关的语法和功能.在这里,我们使用mongodb自带的mongo shell(mongo shell是一个javascript环境的mongodb客户端,支持js语法)来学习. 2. 准备

学习MongoDB 五: MongoDB查询(数组、内嵌文档)(二)

一.简介 我们上一篇介绍了db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段,我们今天介绍了对数组和内嵌文档的查询操作,尤其是对$elemMatch 同样可以用在find方法的第二个参数来限制返回数组内的元素,只返回我们需要的文档的介绍.我们经常在查询条件查询内嵌文档数组时,只需要返回主文档并返回内嵌文档数组中我们只需要的值,而不是把内嵌文档的数组都返回. 二.对数组根据条件查询  $all.$size.$slice.$e