? 在前面的文章里面主要介紹了MongoDB的文檔,集合,數(shù)據(jù)庫(kù)等操作和對(duì)文檔的增、刪、改相關(guān)知識(shí),接下來(lái)會(huì)總結(jié)一點(diǎn)有關(guān)查詢的相關(guān)知識(shí)。
? 在MySQL中,我們知道數(shù)據(jù)查詢是優(yōu)化的主要內(nèi)容,讀寫分離等技術(shù)都是可以用來(lái)處理數(shù)據(jù)庫(kù)查詢優(yōu)化的,足以見數(shù)據(jù)庫(kù)查詢是每個(gè)系統(tǒng)中很重要的一部分,之前介紹了find的簡(jiǎn)單使用,下面會(huì)介紹一些相對(duì)比較復(fù)雜一點(diǎn)的查詢。
一、數(shù)據(jù)查詢
?MySQL數(shù)據(jù)庫(kù)中主要是用select 結(jié)合where子句實(shí)現(xiàn)數(shù)據(jù)的查詢,功能特別強(qiáng)大,例如多表聯(lián)合查詢、支持正則表達(dá)式等。不在這里做過(guò)多的相關(guān)介紹。這里主要介紹MongoDB的相關(guān)查詢,MongoDB中主要用find()實(shí)現(xiàn)數(shù)據(jù)的查詢,同時(shí)也可以使用一些條件限制。
1.1顯示單條數(shù)據(jù)
? 在上篇文章中提到了find()的使用,但是每次查詢數(shù)據(jù),都是查詢所有的,顯示其中的一部分,可以用it迭代。有時(shí)候我們想要查詢其中的一條數(shù)據(jù),具體操作要根據(jù)具體需求實(shí)現(xiàn)。
MongoDB 查詢數(shù)據(jù)的語(yǔ)法
db.collection.find(query,?projection)
??? query :可選,使用查詢操作符指定查詢條件
??? projection :可選,使用投影操作符指定返回的鍵。查詢時(shí)返回文檔中所有鍵值, 只需省略該參數(shù)即可(默認(rèn)省略)。可以使用 pretty() 方法以易讀的方式來(lái)讀取數(shù)據(jù),,語(yǔ)法格式如下
>db.col.find().pretty()
pretty() 方法以格式化的方式來(lái)顯示所有文檔。
例如:
db.winner.find().pretty()
{?"_id"?:?ObjectId("592e7d1caaa464fa8a557e95"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d1eaaa464fa8a557e96"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d1faaa464fa8a557e97"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d1faaa464fa8a557e98"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d21aaa464fa8a557e99"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d22aaa464fa8a557e9a"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec4"),?"winne"?:?41?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec5"),?"winne"?:?42?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec6"),?"winne"?:?43?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec7"),?"winne"?:?44?}
1、查詢某個(gè)集合中的所有數(shù)據(jù)
db.winner.find()
{?"_id"?:?ObjectId("592e7d1caaa464fa8a557e95"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d1eaaa464fa8a557e96"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d1faaa464fa8a557e97"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d1faaa464fa8a557e98"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d21aaa464fa8a557e99"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d22aaa464fa8a557e9a"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec4"),?"winne"?:?41?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec5"),?"winne"?:?42?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec6"),?"winne"?:?43?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec7"),?"winne"?:?44?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec8"),?"winne"?:?45?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec9"),?"winne"?:?46?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557eca"),?"winne"?:?47?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ecb"),?"winne"?:?48?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ecc"),?"winne"?:?49?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ecd"),?"winne"?:?50?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ece"),?"winne"?:?51?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ecf"),?"winne"?:?52?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ed0"),?"winne"?:?53?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ed1"),?"winne"?:?54?}
Type?"it"?for?more
默認(rèn)顯示20條數(shù)據(jù),其他數(shù)據(jù)可以輸入it迭代。
2、顯示一條數(shù)據(jù)
?find()是輸出所有結(jié)果,里面可能有些文檔內(nèi)容相同,但是“_id”肯定是不一樣的,這時(shí)我們可以使用findOne()方法查詢,或者可以使用db.winner.find({winne:1955}).limit(1)。
db.winner.find({winne:1955})
{?"_id"?:?ObjectId("592e7d1caaa464fa8a557e95"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d1eaaa464fa8a557e96"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d1faaa464fa8a557e97"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d1faaa464fa8a557e98"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d21aaa464fa8a557e99"),?"winne"?:?1955?}
{?"_id"?:?ObjectId("592e7d22aaa464fa8a557e9a"),?"winne"?:?1955?}
假如要查詢winner集合中winne=1955的一條數(shù)據(jù),而用find()查詢出所有的數(shù)據(jù),這時(shí)就可以使用findOne()
db.winner.findOne({winne:1955})
{?"_id"?:?ObjectId("592e7d1caaa464fa8a557e95"),?"winne"?:?1955?}或者可以使用
db.winner.find({winne:1955}).limit(1)
{?"_id"?:?ObjectId("592e7d1caaa464fa8a557e95"),?"winne"?:?1955?}
兩者的區(qū)別
findOne()有點(diǎn)類似MySQL里面的distinct,會(huì)返回查詢的第一條結(jié)果,如果搜索不到想要的數(shù)據(jù)就會(huì)
返回NULL,
db.winner.findOne({winne:200888})
null
db.winner.find({winne:1955}).limit(1)方法就和MySQL里面的limit是一樣的,主要是限制查詢結(jié)果的條數(shù)。
3、查詢滿足一定條件的數(shù)據(jù)
?在MySQL中查詢時(shí),可以結(jié)合where以及字段等信息查詢數(shù)據(jù),而MongoDB中也是可以的,同樣可以支持一些條件判斷語(yǔ)句。
格式范例RDBMS中的類似語(yǔ)句|
| 等于 | {<key>:<value>} | db.col.find({"winne":"1995"}).pretty() | where winne = '50' |
| 小于 | {<key>:{$lt:<value>}} | db.col.find({"winne":{$lt:50}}).pretty() | where winne < 50 |
| 小于或等于 | {<key>:{$lte:<value>}} | db.col.find({"winne":{$lte:50}}).pretty() | where winne <= 50 |
| 大于 | {<key>:{$gt:<value>}} | db.col.find({"winne":{$gt:50}}).pretty() | where winne > 50 |
| 大于或等于 | {<key>:{$gte:<value>}} | db.col.find({"winne":{$gte:50}}).pretty() | where winne >= 50 |
| 不等于 | {<key>:{$ne:<value>}} | db.col.find({"winne":{$ne:50}}).pretty() | where winne != 50 |
$gt?--------?greater?than???$gte?---------?gt?equal
$lt?--------?less?than??????$lte?---------?lt?equal
$ne?-----------?not?equal1、查詢winner集合中winne<50的相關(guān)數(shù)據(jù)db.winner.find({winne:{$lt?:50}})
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec4"),?"winne"?:?41?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec5"),?"winne"?:?42?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec6"),?"winne"?:?43?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec7"),?"winne"?:?44?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec8"),?"winne"?:?45?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec9"),?"winne"?:?46?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557eca"),?"winne"?:?47?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ecb"),?"winne"?:?48?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ecc"),?"winne"?:?49?}
{?"_id"?:?ObjectId("592e7e17aaa464fa8a557f28"),?"winne"?:?41?}
{?"_id"?:?ObjectId("592e7e17aaa464fa8a557f29"),?"winne"?:?42?}
{?"_id"?:?ObjectId("592e7e17aaa464fa8a557f2a"),?"winne"?:?43?}
{?"_id"?:?ObjectId("592e7e17aaa464fa8a557f2b"),?"winne"?:?44?}
2、查詢winner集合中40=<winne<50的相關(guān)數(shù)據(jù)
db.winner.find({winne:{$gte:40,$lt:45}})
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec4"),?"winne"?:?41?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec5"),?"winne"?:?42?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec6"),?"winne"?:?43?}
{?"_id"?:?ObjectId("592e7e14aaa464fa8a557ec7"),?"winne"?:?44?}
{?"_id"?:?ObjectId("592e7e17aaa464fa8a557f28"),?"winne"?:?41?}
{?"_id"?:?ObjectId("592e7e17aaa464fa8a557f29"),?"winne"?:?42?}
{?"_id"?:?ObjectId("592e7e17aaa464fa8a557f2a"),?"winne"?:?43?}
{?"_id"?:?ObjectId("592e7e17aaa464fa8a557f2b"),?"winne"?:?44?}
{?"_id"?:?ObjectId("592e7e18aaa464fa8a557f8c"),?"winne"?:?41?}
{?"_id"?:?ObjectId("592e7e18aaa464fa8a557f8d"),?"winne"?:?42?}
{?"_id"?:?ObjectId("592e7e18aaa464fa8a557f8e"),?"winne"?:?43?}
{?"_id"?:?ObjectId("592e7e18aaa464fa8a557f8f"),?"winne"?:?44?}
4、MongoDB AND 條件
MongoDB 的 find() 方法可以傳入多個(gè)鍵(key),每個(gè)鍵(key)以逗號(hào)隔開,語(yǔ)法格式如下:
>db.winner.find({key1:value1, key2:value2}).pretty()
#插入測(cè)試數(shù)據(jù)
for(i=0;i<20;i++)db.info2.insert({name:"linux",
object:"SA",
company:"docker",
phone:i})
for(i=0;i<20;i++)db.info2.insert({name:"openstack",
object:"DBA",
company:"could",
phone:i})#檢查測(cè)試數(shù)據(jù)
>?db.info2.find()
db.info2.find()
{?"_id"?:?ObjectId("592f838dd276944818f7edb4"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?0?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb5"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?1?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb6"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?2?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb7"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?3?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb8"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?4?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb9"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?5?}
{?"_id"?:?ObjectId("592f838dd276944818f7edba"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?6?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbb"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?7?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbc"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?8?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbd"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?9?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbe"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?10?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbf"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?11?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc0"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?12?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc1"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?13?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc2"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?14?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc3"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?15?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc4"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?16?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc5"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?17?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc6"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?18?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc7"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?19?}
>db.info2.find().count()??#檢查數(shù)據(jù)的條數(shù)
40
#篩選name=linux?object=SA?phone<5
db.info2.find({name:"linux",object:"SA",phone:{$lt:5}})執(zhí)行db.info2.find({name:"linux",object:"SA",phone:{$lt:5}})
{?"_id"?:?ObjectId("592f838dd276944818f7edb4"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?0?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb5"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?1?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb6"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?2?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb7"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?3?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb8"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?4?}
篩選name=linux?object=SA???5<phone<=10
db.info2.find({name:"linux",object:"SA",phone:{"$gt":5,"$lte":10}})
db.info2.find({name:"linux",object:"SA",phone:{"$gt":5,"$lte":10}})
{?"_id"?:?ObjectId("592f838dd276944818f7edba"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?6?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbb"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?7?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbc"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?8?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbd"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?9?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbe"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?10?}
篩選??5<phone<=10
db.info2.find({phone:{"$gt":5,"$lte":10}})
{?"_id"?:?ObjectId("592f838dd276944818f7edba"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?6?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbb"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?7?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbc"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?8?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbd"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?9?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbe"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?10?}
{?"_id"?:?ObjectId("592f838fd276944818f7edce"),?"name"?:?"openstack",?"object"?:?"DBA",?"company"?:?"could",?"phone"?:?6?}
{?"_id"?:?ObjectId("592f838fd276944818f7edcf"),?"name"?:?"openstack",?"object"?:?"DBA",?"company"?:?"could",?"phone"?:?7?}
{?"_id"?:?ObjectId("592f838fd276944818f7edd0"),?"name"?:?"openstack",?"object"?:?"DBA",?"company"?:?"could",?"phone"?:?8?}
{?"_id"?:?ObjectId("592f838fd276944818f7edd1"),?"name"?:?"openstack",?"object"?:?"DBA",?"company"?:?"could",?"phone"?:?9?}
{?"_id"?:?ObjectId("592f838fd276944818f7edd2"),?"name"?:?"openstack",?"object"?:?"DBA",?"company"?:?"could",?"phone"?:?10?}
5 MongoDB OR 條件
MongoDB 除了有類似MySQL的AND條件語(yǔ)句外,還有OR 條件語(yǔ)句,OR 條件語(yǔ)句使用了關(guān)鍵字 $or,語(yǔ)法格式如下:
>db.collections.find(
?? {
????? $or: [
?? ????? {key1: value1}, {key2:value2}
????? ]
?? }
).pretty()
#查name=linux?或者object=redis
db.info2.find(
{$or:[{name:"linux"},{object:"redis"}]}
)
db.info2.find(db.info2.find(
...?{$or:[{name:"linux"},{object:"redis"}]{$or:[{name:"linux"},{object:"redis"}]
...?
...?}}
...?))
{?"_id"?:?ObjectId("592f838dd276944818f7edb4"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?0?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb5"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?1?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb6"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?2?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb7"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?3?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb8"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?4?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb9"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?5?}
{?"_id"?:?ObjectId("592f838dd276944818f7edba"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?6?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbb"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?7?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbc"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?8?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbd"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?9?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbe"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?10?}
{?"_id"?:?ObjectId("592f838dd276944818f7edbf"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?11?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc0"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?12?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc1"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?13?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc2"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?14?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc3"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?15?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc4"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?16?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc5"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?17?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc6"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?18?}
{?"_id"?:?ObjectId("592f838dd276944818f7edc7"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?19?}
Type?"it"?for?more
>?itit
{?"_id"?:?ObjectId("592f8964d276944818f7eddc"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?0?}
{?"_id"?:?ObjectId("592f8964d276944818f7eddd"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?1?}
{?"_id"?:?ObjectId("592f8964d276944818f7edde"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?2?}
{?"_id"?:?ObjectId("592f8964d276944818f7eddf"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?3?}
{?"_id"?:?ObjectId("592f8964d276944818f7ede0"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?4?}
{?"_id"?:?ObjectId("592f8964d276944818f7ede1"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?5?}
{?"_id"?:?ObjectId("592f8964d276944818f7ede2"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?6?}
{?"_id"?:?ObjectId("592f8964d276944818f7ede3"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?7?}
{?"_id"?:?ObjectId("592f8964d276944818f7ede4"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?8?}
{?"_id"?:?ObjectId("592f8964d276944818f7ede5"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?9?}
6、AND和OR綜合使用
查詢phone<5,name=MongoDB或者name=linux
db.info2.find({phone:{$lt:5},$or:[{name:"MongoDB"},{name:"linux"}]})
db.info2.find({phone:{$lt:5},$or:[{name:"MongoDB"},{name:"linux"}]})
{?"_id"?:?ObjectId("592f838dd276944818f7edb4"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?0?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb5"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?1?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb6"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?2?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb7"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?3?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb8"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?4?}
{?"_id"?:?ObjectId("592f8964d276944818f7eddc"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?0?}
{?"_id"?:?ObjectId("592f8964d276944818f7eddd"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?1?}
{?"_id"?:?ObjectId("592f8964d276944818f7edde"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?2?}
{?"_id"?:?ObjectId("592f8964d276944818f7eddf"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?3?}
{?"_id"?:?ObjectId("592f8964d276944818f7ede0"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?4?}
7、查詢結(jié)果排序
在MySQL中是有order by條件,可以根據(jù)desc或者asc進(jìn)行升序或者降序操作,而MongoDB中是可以利用sort()方法實(shí)現(xiàn)排序的,例如對(duì)6中的結(jié)果處理,根據(jù)phone排序。
基本語(yǔ)法
db.info2.find().sort({phone:1}) #這里phone表示根據(jù)該key排序,1表示升序,-1表示降序。
db.info2.find({phone:{$lt:5},$or:[{name:"MongoDB"},{name:"linux"}]}).sort({phone:1})
{?"_id"?:?ObjectId("592f838dd276944818f7edb4"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?0?}
{?"_id"?:?ObjectId("592f8964d276944818f7eddc"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?0?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb5"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?1?}
{?"_id"?:?ObjectId("592f8964d276944818f7eddd"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?1?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb6"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?2?}
{?"_id"?:?ObjectId("592f8964d276944818f7edde"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?2?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb7"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?3?}
{?"_id"?:?ObjectId("592f8964d276944818f7eddf"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?3?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb8"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?4?}
{?"_id"?:?ObjectId("592f8964d276944818f7ede0"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?4?}
8、MongoDB Skip() 方法
在前面介紹了limit(),sort(),count()等方法,接下來(lái)要介紹一個(gè)比較有趣的skip()方法,在使用limit()的時(shí)候可以顯示你要求的幾條,而skip()方法是跳過(guò)幾條。
db.info2.find({phone:{$lt:5},$or:[{name:"MongoDB"},{name:"linux"}]}).sort({phone:1})
{?"_id"?:?ObjectId("592f838dd276944818f7edb4"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?0?}
{?"_id"?:?ObjectId("592f8964d276944818f7eddc"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?0?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb5"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?1?}
{?"_id"?:?ObjectId("592f8964d276944818f7eddd"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?1?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb6"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?2?}
{?"_id"?:?ObjectId("592f8964d276944818f7edde"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?2?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb7"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?3?}
{?"_id"?:?ObjectId("592f8964d276944818f7eddf"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?3?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb8"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?4?}
{?"_id"?:?ObjectId("592f8964d276944818f7ede0"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?4?}
使用skip()方法
db.info2.find({phone:{$lt:5},$or:[{name:"MongoDB"},{name:"linux"}]}).sort({phone:1}).skip(3)
{?"_id"?:?ObjectId("592f8964d276944818f7eddd"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?1?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb6"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?2?}
{?"_id"?:?ObjectId("592f8964d276944818f7edde"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?2?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb7"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?3?}
{?"_id"?:?ObjectId("592f8964d276944818f7eddf"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?3?}
{?"_id"?:?ObjectId("592f838dd276944818f7edb8"),?"name"?:?"linux",?"object"?:?"SA",?"company"?:?"docker",?"phone"?:?4?}
{?"_id"?:?ObjectId("592f8964d276944818f7ede0"),?"name"?:?"MongoDB",?"object"?:?"redis",?"company"?:?"winner",?"phone"?:?4?}
skip?方法有點(diǎn)類似于MySQL里面的limit之間間隔情況。
這里介紹了有關(guān)查詢的問(wèn)題,在數(shù)據(jù)庫(kù)中,查詢是非常重要的一部分,所以介紹的篇幅也是比較多的,后期遇到其他問(wèn)題也會(huì)繼續(xù)總結(jié)輸出。
轉(zhuǎn)載于:https://blog.51cto.com/dreamlinux/1931384
總結(jié)
以上是生活随笔為你收集整理的Mongodb基础实践(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。