在MongoDB數據庫中查詢數據(上)
在MongoDB數據庫中,可以使用Collection對象的find方法從一個集合中查詢多個數據文檔,find方法使用方法如下所示:
collection.find(selector, [options]);
selector值為一個對象,用於指定查詢時使用的查詢條件,options是可選的參數,該參數值是一個對象,用於指定查詢數據時所選用的選項。
find方法返回一個代表游標的Cursor對象,在該游標中包含了所有查詢到的數據文檔信息。可以使用Cursor對象的toArray方法獲取所有查詢到的數據文檔,方法如下:
collection.find(selector, [options]).toArray(callback);
callback 用於指定數據文檔操作結束時執行的回調函數,該回調函數使用如下所示:
function(err, docs) {};
在該回調函數中,err參數為獲取數據文檔操作失敗時觸發的錯誤對象,docs參數為一個數組,包含了所有查詢到的數據文檔。
如下是一個查詢 user結合中的所有數據,如果查詢失敗,則拋出查詢數據失敗時觸發的錯誤對象,如果查詢成功,則在控制台中輸出所有查詢到的數據,然后關閉數據庫,如下所示:
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({}).toArray(function(err, docs) { if (err) { throw err; } else { console.log(docs); db.close(); } }); } }); } });
如下圖所示:
二:根據查詢條件來查詢數據
2.1 可以在查詢條件中指定需要查詢的字段及字段值,如下方法所示:
{<字段名>:<字段值>}
下面我們把上面的查詢條件改為如下:
collection.find({userName: '龍恩'});
所有代碼如下:
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: '龍恩'}).toArray(function(err, docs) { if (err) { throw err; } else { console.log(docs); db.close(); } }); } }); } });
執行后如下所示:
2.2 可以在查詢選擇器中指定需要查詢的字段並限定字段值的范圍,如下方法所示:
{<字段名>:{$in:[<字段值1>,<字段值2>...]}}
下面我們將find方法的查詢條件改為如下所示:
collection.find({userName:{$in:['空智']}});
下面是更改后的所有代碼,如下所示:
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:{$in:['空智']}}).toArray(function(err, docs) { if (err) { throw err; } else { console.log(docs); db.close(); } }); } }); } });
運行結果如下所示:
2.3 指定多個字段進行查詢
在一個復雜的查詢條件中,可能需要同時指定多個字段值的條件查詢。下面我們往我們的數據中插入如下一些數據;代碼如下:
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 }); var docs = [ {type: 'food', price: 11}, {type: 'food', price: 10}, {type: 'food', price: 9}, {type: 'food', price: 8}, {type: 'food', price: 9} ]; db.open(function(err, db) { if (err) { throw err; } else { console.log('成功建立數據庫連接'); db.collection('users', function(err, collection) { collection.insert(docs, function(err, docs) { if (err) { throw err; } else { console.log(docs); db.close(); } }) }); } });
如下圖所示:
現在我們來查詢這些數據中 type 字段值等於 'food', 且 price字段值小於10的數據,如下代碼所示:
collection.find({type:'food', price:{$lt:10}})
所有代碼如下:
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({type:'food', price:{$lt:10}}).toArray(function(err, docs) { if (err) { throw err; } else { console.log(docs); db.close(); } }); } }); } });
執行效果如下圖所示:
2.4 使用 '或' 關系來指定多個字段值的查詢條件。
在一個復雜的查詢條件中,可能需要使用 ‘或’ 關系來指定多個字段的查詢條件,比如 現在我們查詢,price為11, 或者price字段值小於9的數據,使用如下方法:
collection.find({ type:'food', $or: [ {price: 11}, {price: {$lt: 9}} ] });
所有代碼如下所示:
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({ type:'food', $or: [ {price: 11}, {price: {$lt: 9}} ] }).toArray(function(err, docs) { if (err) { throw err; } else { console.log(docs); db.close(); } }); } }); } });
如下圖所示: