標籤:ons 單點 成功 data 文檔 inf 第一個 pad nec
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(); } }); } }); }});
如所示:
我們可以單獨指定_id欄位是否需要包含或刪除,如下是我們在查詢結果中指定排除_id欄位,如下代碼:
collection.find({userName:‘空智‘}, {fields: {userName: 1, _id: 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: 1, _id: 0}}).toArray(function(err, docs) { if (err) { throw err; } else { console.log(docs); db.close(); } }); } }); }});
如所示:
如果在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(); } }); } }); }});
如所示:
MongoDB資料庫中查詢資料(下)