詳解MongoDB的條件查詢和排序
find 方法
查詢的基本格式是db.collection.find({條件}),其中條件是可選的,類(lèi)似于 MySQL 的 WHERE 條件一樣。示例如下:
// 查找全部文檔
db.collection.find({});
// 查找指定條件的文檔
db.collection.find({key: value});
// 查找昵稱為島上碼農(nóng)的用戶
db.users.find({nickname: '島上碼農(nóng)'});
條件組合
可以使用 $and、$or 和 $not 來(lái)設(shè)置組合條件。
// AND 查詢格式
db.collection.find({
$and: [
{key1: value1}, {key2: value2}
]
});
// OR 查詢格式
db.collection.find({
$or: [
{key1: value1}, {key2: value2}
]
});
// NOT 查詢格式
db.collection.find(
{key: {$not: {條件表達(dá)式}}
);
例如下面的 users數(shù)據(jù)集:
[
{nickname: '島上碼農(nóng)', score: 90, gender: 'male'},
{nickname: '瑪麗', score: 98, gender: 'female'},
{nickname: 'Tom', score: 76, gender: 'male'}
]
查找分?jǐn)?shù)是90或76分的用戶:
db.users.find({
$or: [
{score: 90}, {score: 76}
]
});
查找性別不是 male 的用戶和查找分?jǐn)?shù)高于80分用戶:
db.users.find({
gender: {$not: {$eq: 'male'}}
});
db.users.find({
score: {$not: {$lt: 80}}
});
其中$eq為相等條件,$lt為小于條件。 條件可以嵌套使用,例如and和and和or 嵌套,表示(a || b) && (c || d),格式如下:
// AND與OR 嵌套查詢格式
db.collection.find({
$and: [
{$or: [{key1: value1}, {key2: value2}]},
{$or: [{key3: value1}, {key4: value2}]},
]
});
//查找 nickename是島上碼農(nóng)或瑪麗,且分?jǐn)?shù)是90或76的用戶
db.users.find({
$and: [
{$or: [{nickname: '島上碼農(nóng)'}, {nickname: '瑪麗'}]},
{$or: [{score: 90}, {score: 76}]}
]
});
//查找 nickname是島上碼農(nóng)且分?jǐn)?shù)是90,或nickname是瑪麗且分?jǐn)?shù)是76的用戶
db.users.find({
$or: [
{$and: [{nickname: '島上碼農(nóng)'}, {score: 90}]},
{$and: [{nickname: '瑪麗'}, {score: 76}]}
]
});
//查找nickname是島上碼農(nóng),且分?jǐn)?shù)不低于80分的用戶
db.users.find({
$and: [
{nickname: '島上碼農(nóng)'},
{score: {$not:{$lt: 80}}}
]
});
比較操作符
在 MongoDB 提供了如下比較操作符,比較操作符的格式為{key: {$op: value}}:
- $eq:相等操作符,即 a == b;
- $gt:大于,即 a > b;
- $gte:大于等于,即 a >= b;
- $lt:小于,即 a < b;
- $lte:小于等于,即 a <= b。
IN 查詢
in 查詢的格式和比較操作符類(lèi)似,只是對(duì)應(yīng)的值是數(shù)組,即
db.collection.find({key: {$in: [...]}});
例如,需要查找分?jǐn)?shù)為90,76的用戶:
db.users.find({score: {$in: [76, 90]}});
in 查詢也可以和其他條件組合,如and 查詢:
db.users.find({
$and: [
{score: {$in: [76, 90]}},
{gender: 'male'}
]
});
限制返回結(jié)果條數(shù)和跳過(guò)數(shù)據(jù)
find 方法會(huì)將所有匹配條件的數(shù)據(jù)查找出來(lái),因此對(duì)于數(shù)據(jù)集很大的時(shí)候會(huì)導(dǎo)致速度很慢且產(chǎn)生大量的 磁盤(pán) I/O,如果確定數(shù)據(jù)只有1條的時(shí)候可以使用 findOne,如果要限制查詢條數(shù)可以使用 limit或 skip。limit 是查詢到指定數(shù)量后的結(jié)果就返回,而 skip 是跳過(guò)前面指定數(shù)量的結(jié)果。
// 查找指定條件的文檔的 n 條數(shù)據(jù)
db.collection.find({key: value}).limit(n);
//示例:查詢超過(guò)80分的3個(gè)用戶
db.users.find({score: {$gt: 80}}).limit(3);
// 查找指定條件的文檔的,跳過(guò)前 n 條數(shù)據(jù)
db.collection.find({key: value}).skip(n);
//示例: 查詢超過(guò)80分的用戶,跳過(guò)前3個(gè)
db.users.find({score: {$gt: 80}}).skip(3);
排序
排序使用格式如下:
db.collection.find({條件}).sort({key: 1});
其中1表示升序,-1表示降序,例如我們需要以分?jǐn)?shù)降序排序:
db.users.find().sort({score: -1});
總結(jié)
本篇介紹了 MongoDB 的條件查詢操作,限制返回條數(shù)和排序??梢钥吹?,MongoDB 的操作雖然語(yǔ)法和 SQL 不同,但是都有對(duì)應(yīng)的功能輔助查詢,對(duì)于查詢來(lái)說(shuō)也是十分便捷的。
以上就是詳解MongoDB的條件查詢和排序的詳細(xì)內(nèi)容,更多關(guān)于MongoDB的條件查詢和排序的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺談MySQL和MariaDB區(qū)別(mariadb和mysql的性能比較)
MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品2018-02-02
MongoDB下根據(jù)數(shù)組大小進(jìn)行查詢的方法
這篇文章主要介紹了MongoDB下根據(jù)數(shù)組大小進(jìn)行查詢的方法,分別實(shí)現(xiàn)了指定大小的數(shù)組和某個(gè)范圍的數(shù)組,需要的朋友可以參考下2014-04-04
ubuntu安裝mongodb創(chuàng)建賬號(hào)和庫(kù)及添加坐標(biāo)索引的流程分析
這篇文章主要介紹了ubuntu安裝mongodb創(chuàng)建賬號(hào)和庫(kù)及添加坐標(biāo)索引的流程分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
mongodb在建立一個(gè)T級(jí)別的數(shù)據(jù)庫(kù)時(shí),進(jìn)程掛掉的解決方法
這篇文章主要介紹了mongodb在建立一個(gè)T級(jí)別的數(shù)據(jù)庫(kù)時(shí),進(jìn)程掛掉,需要的朋友可以參考下2017-03-03
mongodb聚合_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了mongodb聚合的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
Laravel?框架中使用?MongoDB?數(shù)據(jù)庫(kù)的操作
這篇文章主要介紹了Laravel?框架中使用?MongoDB?數(shù)據(jù)庫(kù)的問(wèn)題及操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
MongoDB 中聚合統(tǒng)計(jì)計(jì)算--$SUM表達(dá)式
這篇文章主要介紹了MongoDB 中聚合統(tǒng)計(jì)計(jì)算--$SUM表達(dá)式的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08

