1. 程式人生 > >3-MongoDB: 查詢(一)

3-MongoDB: 查詢(一)

簡單 gte ted 分享圖片 string font 投影 binary ava

一、簡介

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

3-MongoDB: 查詢(一)