詳解MongoDB的條件查詢和排序
find 方法
查詢的基本格式是db.collection.find({條件}),其中條件是可選的,類似於 MySQL 的 WHERE 條件一樣。示例如下:
// 查找全部文檔 db.collection.find({}); // 查找指定條件的文檔 db.collection.find({key: value}); // 查找昵稱為島上碼農的用戶 db.users.find({nickname: '島上碼農'});
條件組合
可以使用 $and、$or 和 $not 來設置組合條件。
// AND 查詢格式 db.collection.find({ $and: [ {key1: value1}, {key2: value2} ] }); // OR 查詢格式 db.collection.find({ $or: [ {key1: value1}, {key2: value2} ] }); // NOT 查詢格式 db.collection.find( {key: {$not: {條件表達式}} );
例如下面的 users數據集:
[ {nickname: '島上碼農', score: 90, gender: 'male'}, {nickname: '瑪麗', score: 98, gender: 'female'}, {nickname: 'Tom', score: 76, gender: 'male'} ]
查找分數是90或76分的用戶:
db.users.find({ $or: [ {score: 90}, {score: 76} ] });
查找性別不是 male 的用戶和查找分數高於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是島上碼農或瑪麗,且分數是90或76的用戶 db.users.find({ $and: [ {$or: [{nickname: '島上碼農'}, {nickname: '瑪麗'}]}, {$or: [{score: 90}, {score: 76}]} ] }); //查找 nickname是島上碼農且分數是90,或nickname是瑪麗且分數是76的用戶 db.users.find({ $or: [ {$and: [{nickname: '島上碼農'}, {score: 90}]}, {$and: [{nickname: '瑪麗'}, {score: 76}]} ] }); //查找nickname是島上碼農,且分數不低於80分的用戶 db.users.find({ $and: [ {nickname: '島上碼農'}, {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 查詢的格式和比較操作符類似,隻是對應的值是數組,即
db.collection.find({key: {$in: [...]}});
例如,需要查找分數為90,76的用戶:
db.users.find({score: {$in: [76, 90]}});
in 查詢也可以和其他條件組合,如and 查詢:
db.users.find({ $and: [ {score: {$in: [76, 90]}}, {gender: 'male'} ] });
限制返回結果條數和跳過數據
find 方法會將所有匹配條件的數據查找出來,因此對於數據集很大的時候會導致速度很慢且產生大量的 磁盤 I/O,如果確定數據隻有1條的時候可以使用 findOne,如果要限制查詢條數可以使用 limit或 skip。limit 是查詢到指定數量後的結果就返回,而 skip 是跳過前面指定數量的結果。
// 查找指定條件的文檔的 n 條數據 db.collection.find({key: value}).limit(n); //示例:查詢超過80分的3個用戶 db.users.find({score: {$gt: 80}}).limit(3); // 查找指定條件的文檔的,跳過前 n 條數據 db.collection.find({key: value}).skip(n); //示例: 查詢超過80分的用戶,跳過前3個 db.users.find({score: {$gt: 80}}).skip(3);
排序
排序使用格式如下:
db.collection.find({條件}).sort({key: 1});
其中1表示升序,-1表示降序,例如我們需要以分數降序排序:
db.users.find().sort({score: -1});
總結
本篇介紹瞭 MongoDB 的條件查詢操作,限制返回條數和排序。可以看到,MongoDB 的操作雖然語法和 SQL 不同,但是都有對應的功能輔助查詢,對於查詢來說也是十分便捷的。
以上就是詳解MongoDB的條件查詢和排序的詳細內容,更多關於MongoDB的條件查詢和排序的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Python 操作 MongoDB 講解詳細
- 深入瞭解Python如何操作MongoDB
- MongoDB基礎之查詢文檔
- python基礎篇之pandas常用基本函數匯總
- MongoDB客戶端工具NoSQL Manager for MongoDB介紹