在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(); } }); } }); } });
如下圖所示: