Tìm kiếm Node.js MongoDB
Trong MongoDB, chúng tôi sử dụng các phương thức find và findOne để tìm dữ liệu trong bộ sưu tập.
Giống như câu lệnh SELECT được sử dụng để tìm dữ liệu trong bảng trong cơ sở dữ liệu MySQL.
Tìm một
Để chọn dữ liệu từ bộ sưu tập trong MongoDB, chúng ta có thể sử dụng phương thức findOne()
.
Phương thức findOne()
trả về lần xuất hiện đầu tiên trong vùng chọn.
Tham số đầu tiên của phương thức findOne()
là một đối tượng truy vấn. Trong ví dụ này, chúng tôi sử dụng một đối tượng truy vấn trống để chọn tất cả tài liệu trong một bộ sưu tập (nhưng chỉ trả về tài liệu đầu tiên).
Ví dụ
Tìm tài liệu đầu tiên trong bộ sưu tập khách hàng:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost: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();
});
});
Chạy ví dụ »Lưu mã ở trên vào một tệp có tên "demo_mongodb_findone.js" và chạy tệp:
Chạy "demo_mongodb_findone.js"
C:\Users\ Your Name >node demo_mongodb_findone.js
Điều này sẽ cho bạn kết quả này:
Company Inc.
Tìm tất cả
Để chọn dữ liệu từ một bảng trong MongoDB, chúng ta cũng có thể sử dụng phương thức find()
.
Phương thức find()
trả về tất cả các lần xuất hiện trong vùng chọn.
Tham số đầu tiên của phương thức find()
là một đối tượng truy vấn. Trong ví dụ này, chúng tôi sử dụng một đối tượng truy vấn trống để chọn tất cả tài liệu trong bộ sưu tập.
Không có tham số nào trong phương thức find() cho bạn kết quả tương tự như SELECT * trong MySQL.
Ví dụ
Tìm tất cả các tài liệu trong bộ sưu tập của khách hàng:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost: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();
});
});
Chạy ví dụ »Lưu mã ở trên vào tệp có tên "demo_mongodb_find.js" và chạy tệp:
Chạy "demo_mongodb_find.js"
C:\Users\ Your Name >node demo_mongodb_find.js
Điều này sẽ cho bạn kết quả này:
[
{ _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'}
]
Tìm một số
Tham số thứ hai của phương thức find()
là đối tượng projection
tả trường nào sẽ đưa vào kết quả.
Tham số này là tùy chọn và nếu bị bỏ qua, tất cả các trường sẽ được đưa vào kết quả.
Ví dụ
Trả về các trường "tên" và "địa chỉ" của tất cả tài liệu trong bộ sưu tập khách hàng:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost: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();
});
});
Chạy ví dụ »Lưu mã ở trên vào tệp có tên "demo_mongodb_find_fields.js" và chạy tệp:
Chạy "demo_mongodb_find_fields.js"
C:\Users\ Your Name >node demo_mongodb_find_fields.js
Điều này sẽ cho bạn kết quả này:
[
{ 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'}
]
Bạn không được phép chỉ định cả hai giá trị 0 và 1 trong cùng một đối tượng (trừ khi một trong các trường là trường _id). Nếu bạn chỉ định một trường có giá trị 0 thì tất cả các trường khác sẽ nhận giá trị 1 và ngược lại:
Ví dụ
Ví dụ này sẽ loại trừ "địa chỉ" khỏi kết quả:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost: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();
});
});
Chạy ví dụ »Để loại trừ trường _id, bạn phải đặt giá trị của nó thành 0:
Ví dụ
Ví dụ này sẽ chỉ trả về trường "tên":
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost: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();
});
});
Chạy ví dụ »Ví dụ
Ví dụ này sẽ cho bạn kết quả tương tự như ví dụ đầu tiên; trả về tất cả các trường ngoại trừ trường _id:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost: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();
});
});
Chạy ví dụ »Ví dụ
Bạn sẽ gặp lỗi nếu chỉ định cả hai giá trị 0 và 1 trong cùng một đối tượng (trừ khi một trong các trường là trường _id):
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost: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();
});
});
Chạy ví dụ »Đối tượng kết quả
Như bạn có thể thấy từ kết quả của ví dụ trên, kết quả có thể được chuyển đổi thành một mảng chứa mỗi tài liệu dưới dạng một đối tượng.
Để trả về, ví dụ: địa chỉ của tài liệu thứ ba, chỉ cần tham khảo thuộc tính địa chỉ của đối tượng mảng thứ ba:
Ví dụ
Trả về địa chỉ của tài liệu thứ ba:
console.log(result[2].address);
nào sẽ tạo ra kết quả này:
Apple st 652