Node.js MongoDB 查詢
在 MongoDB 中,我們使用 find 和 findOne 方法來查詢集合中的資料。
這就像在 MySQL 資料庫的表中查詢資料時使用 SELECT 語句一樣。
查詢單個文件 (Find One)
要從 MongoDB 中的集合中選擇資料,我們可以使用 findOne()
方法。
findOne()
方法返回選擇中的第一個匹配項。
findOne()
方法的第一個引數是一個查詢物件。在此示例中,我們使用一個空的查詢物件,它會選擇集合中的所有文件(但只返回第一個文件)。
示例
查詢 customers 集合中的第一個文件
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").findOne({}, function(err, result) {
if (err) throw err;
console.log(result.name);
db.close();
});
});
執行示例 »
將上面的程式碼儲存在一個名為 "demo_mongodb_findone.js" 的檔案中並執行該檔案。
執行 "demo_mongodb_findone.js"
C:\Users\您的名字>node demo_mongodb_findone.js
這將產生以下結果:
Company Inc.
查詢所有文件 (Find All)
要從 MongoDB 中的表選擇資料,我們也可以使用 find()
方法。
find()
方法返回選擇中的所有匹配項。
find()
方法的第一個引數是一個查詢物件。在此示例中,我們使用一個空的查詢物件,它會選擇集合中的所有文件。
在 find() 方法中不帶引數與 MySQL 中的 SELECT * 效果相同。
示例
查詢 customers 集合中的所有文件
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
執行示例 »
將上面的程式碼儲存在一個名為 "demo_mongodb_find.js" 的檔案中並執行該檔案。
執行 "demo_mongodb_find.js"
C:\Users\您的名字>node demo_mongodb_find.js
這將產生以下結果:
[
{ _id: 58fdbf5c0ef8a50b4cdd9a84 , name: 'John', address: 'Highway 71'},
{ _id: 58fdbf5c0ef8a50b4cdd9a85 , name: 'Peter', address: 'Lowstreet 4'},
{ _id: 58fdbf5c0ef8a50b4cdd9a86 , name: 'Amy', address: 'Apple st 652'},
{ _id: 58fdbf5c0ef8a50b4cdd9a87 , name: 'Hannah', address: 'Mountain 21'},
{ _id: 58fdbf5c0ef8a50b4cdd9a88 , name: 'Michael', address: 'Valley 345'},
{ _id: 58fdbf5c0ef8a50b4cdd9a89 , name: 'Sandy', address: 'Ocean blvd 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8a , name: 'Betty', address: 'Green Grass 1'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8b , name: 'Richard', address: 'Sky st 331'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8c , name: 'Susan', address: 'One way 98'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8d , name: 'Vicky', address: 'Yellow Garden 2'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8e , name: 'Ben', address: 'Park Lane 38'},
{ _id: 58fdbf5c0ef8a50b4cdd9a8f , name: 'William', address: 'Central st 954'},
{ _id: 58fdbf5c0ef8a50b4cdd9a90 , name: 'Chuck', address: 'Main Road 989'},
{ _id: 58fdbf5c0ef8a50b4cdd9a91 , name: 'Viola', address: 'Sideway 1633'}
]
查詢部分欄位 (Find Some)
find()
方法的第二個引數是 projection
物件,它描述了結果中應包含哪些欄位。
此引數是可選的,如果省略,則結果中將包含所有欄位。
示例
返回 customers 集合中所有文件的 "name" 和 "address" 欄位
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { projection: { _id: 0, name: 1, address: 1 } }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
執行示例 »
將上面的程式碼儲存在一個名為 "demo_mongodb_find_fields.js" 的檔案中並執行該檔案。
執行 "demo_mongodb_find_fields.js"
C:\Users\您的名字>node demo_mongodb_find_fields.js
這將產生以下結果:
[
{ name: 'John', address: 'Highway 71'},
{ name: 'Peter', address: 'Lowstreet 4'},
{ name: 'Amy', address: 'Apple st 652'},
{ name: 'Hannah', address: 'Mountain 21'},
{ name: 'Michael', address: 'Valley 345'},
{ name: 'Sandy', address: 'Ocean blvd 2'},
{ name: 'Betty', address: 'Green Grass 1'},
{ name: 'Richard', address: 'Sky st 331'},
{ name: 'Susan', address: 'One way 98'},
{ name: 'Vicky', address: 'Yellow Garden 2'},
{ name: 'Ben', address: 'Park Lane 38'},
{ name: 'William', address: 'Central st 954'},
{ name: 'Chuck', address: 'Main Road 989'},
{ name: 'Viola', address: 'Sideway 1633'}
]
您不能在同一個物件中同時指定 0 和 1 值(除非其中一個欄位是 _id 欄位)。如果您指定一個值為 0 的欄位,所有其他欄位都將獲得值 1,反之亦然。
示例
此示例將排除 "address" 欄位的輸出
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { projection: { address: 0 } }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
執行示例 »
要排除 _id 欄位,您必須將其值設定為 0。
示例
此示例將只返回 "name" 欄位
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { projection: { _id: 0, name: 1 } }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
執行示例 »
示例
此示例將產生與第一個示例相同的結果:返回所有欄位,但排除 _id 欄位。
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { projection: { _id: 0 } }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
執行示例 »
示例
如果您在同一個物件中同時指定 0 和 1 值(_id 欄位除外),您會收到一個錯誤。
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection("customers").find({}, { projection: { name: 1, address: 0 } }).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});
執行示例 »
結果物件
正如您從上面示例的結果中看到的,結果可以轉換為一個數組,其中每個文件都是一個物件。
要返回例如第三個文件的地址,只需引用第三個陣列物件的 address 屬性。
示例
返回第三個文件的地址
console.log(result[2].address);
這將產生以下結果:
Apple st 652