MongoDB數據庫中查詢數據(下)mongodb
在find中,options參數值爲一個對象,用來設置查詢數據時使用的選項,下面咱們來對該參數值對象中可使用的屬性進行介紹:數據庫
1. fields; 該屬性值爲一個對象,該對象中各屬性名用來顯示指定在查詢結果中須要包含或排除的字段。該屬性值能夠爲1或0,當屬性值爲1時,表明須要在查詢結果中包含該字段,當屬性值爲0時,表明須要在查詢結果中排除該字段。
注意:在使用fields屬性時,須要統一使用屬性值1或屬性值0來設置除_id字段以外的全部字段。數組
首先咱們來看下數據庫中有哪些數據,以下所示:緩存
下面咱們使用fields字段來在查詢結果中包含或排除哪些字段,下面是在查詢結果中指定只包含 userName: '龍恩'的字段(不單獨指定_id字段時,_id字段也默認包含);以下代碼:函數
collection.find({userName:'龍恩'},{fields: {userName: 1}});
全部代碼以下:性能
const mongo = require('mongodb'); const Server = mongo.Server; const Db = mongo.Db; const server = new Server('localhost', '27017', { auto_reconnect: true }); const db = new Db('dataDb', server, { safe: true }); db.open(function(err, db) { if (err) { throw err; } else { console.log('成功創建數據庫鏈接'); db.collection('users', function(err, collection) { if (err) { throw err; } else { // 開始查詢集合users collection.find({userName:'龍恩'},{fields: {userName: 1}}).toArray(function(err, docs) { if (err) { throw err; } else { console.log(docs); db.close(); } }); } }); } });
以下圖所示:ui
咱們能夠單獨指定_id字段是否須要包含或刪除,以下是咱們在查詢結果中指定排除_id字段,以下代碼:spa
collection.find({userName:'空智'}, {fields: {userName: 1, _id: 0}});
全部代碼以下:3d
const mongo = require('mongodb'); const Server = mongo.Server; const Db = mongo.Db; const server = new Server('localhost', '27017', { auto_reconnect: true }); const db = new Db('dataDb', server, { safe: true }); db.open(function(err, db) { if (err) { throw err; } else { console.log('成功創建數據庫鏈接'); db.collection('users', function(err, collection) { if (err) { throw err; } else { // 開始查詢集合users collection.find({userName:'空智'}, {fields: {userName: 1, _id: 0}}).toArray(function(err, docs) { if (err) { throw err; } else { console.log(docs); db.close(); } }); } }); } });
以下圖所示:code
若是在fields對象中使用屬性值0來設置某些字段,則查詢結果將包含除這些字段以外的全部字段。
咱們能夠先查詢 userName="空智"這個字段後,而後經過fields來排除userName這個屬性值,所以代碼能夠改爲以下:
collection.find({userName: '空智'}, {fields: {userName: 0}});
全部代碼以下所示:
const mongo = require('mongodb'); const Server = mongo.Server; const Db = mongo.Db; const server = new Server('localhost', '27017', { auto_reconnect: true }); const db = new Db('dataDb', server, { safe: true }); db.open(function(err, db) { if (err) { throw err; } else { console.log('成功創建數據庫鏈接'); db.collection('users', function(err, collection) { if (err) { throw err; } else { // 開始查詢集合users collection.find({userName: '空智'}, {fields: {userName: 0}}).toArray(function(err, docs) { if (err) { throw err; } else { console.log(docs); db.close(); } }); } }); } });
以下圖所示:
2. sort;
該屬性是須要用來排序的字段,該屬性值能夠爲一個數組或對象。
2.1 屬性值爲數組的狀況下:
當屬性值爲一個數組時,該數組就包含兩個元素,第一個元素值爲用於排序的字段名,第二個元素值能夠爲1或-1,元素值爲1時指定升序排序,元素值爲-1時指定降序排序。且每個元素爲數組。
下面代碼是經過type字段進行升序排序,price字段降序排序;代碼以下:
collection.find({}, { sort: [ ['type', 1], ['price', -1] ] } )
以下全部代碼:
const mongo = require('mongodb'); const Server = mongo.Server; const Db = mongo.Db; const server = new Server('localhost', '27017', { auto_reconnect: true }); const db = new Db('dataDb', server, { safe: true }); db.open(function(err, db) { if (err) { throw err; } else { console.log('成功創建數據庫鏈接'); db.collection('users', function(err, collection) { if (err) { throw err; } else { // 開始查詢集合users collection.find({}, { sort: [ ['type', 1], ['price', -1] ] } ).toArray(function(err, docs) { if (err) { throw err; } else { console.log(docs); db.close(); } }); } }); } });
查詢結果以下所示:
2.2 屬性值爲對象時
當sort屬性值爲一個對象時,該對象中各屬性名爲用於排序的字段名,各屬性值能夠爲1或-1,屬性值爲1時指定升序排序,屬性值爲-1時指定降序排序。
下面代碼是經過type字段進行升序排序,price字段降序排序;代碼以下:
collection.find({},{sort: {type: 1, price: -1}});
全部代碼仍是和上面同樣,只是把查詢條件換了一下,運行結果和上面同樣的。 能夠看到屬性值爲對象時比數組更簡單點。
3. limit
該屬性是來限定查詢結果條數,該屬性值爲一個整數,用於指定查詢結果條數。
咱們如今來修改查詢的代碼,我如今來查詢 userName='空智'的其中2條數據,以下代碼所示:
collection.find({userName: '空智'}, {limit: 2});
執行結果以下所示:
4. skip
該屬性是來限定在從符合查詢條件的結果中跳過前面多少條數據的文檔,該屬性值爲一個整數,用於指定跳過的數據文檔條數。
首先咱們來看下數據庫中一共有以下數據,以下所示:
而後咱們在查詢結果中指定查詢 userName = '空智'的字段,數據庫中一共有8條 userName='空智'的數據,咱們如今跳過前面6條,從第七條開始,以下代碼便可:
collection.find({userName: '空智'}, {skip: 6});
運行結果以下所示:
5. explain
該屬性是來查看在執行一個find方法查詢數據時的詳細性能信息,使用該屬性後,find方法並不真正執行數據的查詢操做,該方法只返回在查詢數據時的性能信息。以下代碼:
collection.find({},{explain: true})
全部代碼以下:
const mongo = require('mongodb'); const Server = mongo.Server; const Db = mongo.Db; const server = new Server('localhost', '27017', { auto_reconnect: true }); const db = new Db('dataDb', server, { safe: true }); db.open(function(err, db) { if (err) { throw err; } else { console.log('成功創建數據庫鏈接'); db.collection('users', function(err, collection) { if (err) { throw err; } else { // 開始查詢集合users collection.find({},{explain: true}).toArray(function(err, docs) { if (err) { throw err; } else { console.log(docs); db.close(); } }); } }); } });
以下圖所示:
6. raw
該參數值對象中的raw屬性來指定在查詢數據時是否將二進制BSON數據文檔存放在緩存區中,而後將該緩存區做爲查詢結果進行返回。 以下代碼:
collection.find({},{raw: true});
以下圖所示:
7. findOne
該方法是從一個集合中查詢一條數據文檔,當一個集合中存在多條符合查詢條件的數據文檔時,在默認狀況下只返回第一條數據文檔。
以下使用:
collection.findOne(selector, [options], callback);
selector 是查詢條件,必填項。
options 是查詢數據的限定條件。
callback: 用於指定獲取查詢數據操做結束時執行的回調函數,該回調函數以下所示:
function(err, docs) {}
第一個參數err是爲獲取數據操做失敗時觸發的錯誤對象,第二個參數爲查詢到的數據文檔。以下代碼:
collection.findOne({}, function(err, docs){})
全部代碼以下:
const mongo = require('mongodb'); const Server = mongo.Server; const Db = mongo.Db; const server = new Server('localhost', '27017', { auto_reconnect: true }); const db = new Db('dataDb', server, { safe: true }); db.open(function(err, db) { if (err) { throw err; } else { console.log('成功創建數據庫鏈接'); db.collection('users', function(err, collection) { if (err) { throw err; } else { // 開始查詢集合users collection.findOne({}, function(err, docs) { if (err) { throw err; } else { console.log(docs); db.close(); } }); } }); } });
以下圖所示: