Node.js MongoDB Tham gia
Tham gia Bộ sưu tập
MongoDB không phải là cơ sở dữ liệu quan hệ, nhưng bạn có thể thực hiện phép nối bên ngoài bên trái bằng cách sử dụng $lookup
giai đoạn.
Giai $lookup
đoạn này cho phép bạn chỉ định bộ sưu tập nào bạn muốn kết hợp với bộ sưu tập hiện tại và những trường nào phù hợp.
Hãy xem xét bạn có bộ sưu tập "đơn đặt hàng" và bộ sưu tập "sản phẩm":
đơn đặt hàng
[
{ _id: 1, product_id:
154, status: 1 }
]
Mỹ phẩm
[
{ _id: 154, name:
'Chocolate Heaven' },
{ _id: 155, name: 'Tasty Lemons' },
{
_id: 156, name: 'Vanilla Dreams' }
]
Thí dụ
Kết hợp (các) tài liệu "sản phẩm" phù hợp với bộ sưu tập "đơn đặt hàng":
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mydb");
dbo.collection('orders').aggregate([
{ $lookup:
{
from: 'products',
localField: 'product_id',
foreignField: '_id',
as: 'orderdetails'
}
}
]).toArray(function(err,
res) {
if (err) throw err;
console.log(JSON.stringify(res));
db.close();
});
});
Lưu đoạn mã trên vào tệp có tên "demo_mongodb_join.js" và chạy tệp:
Chạy "demo_mongodb_join.js"
C:\Users\Your Name>node demo_mongodb_join.js
Điều này sẽ cung cấp cho bạn kết quả này:
[
{ "_id": 1, "product_id":
154, "status": 1, "orderdetails": [
{ "_id": 154, "name":
"Chocolate Heaven" } ]
}
]
Như bạn có thể thấy từ kết quả ở trên, tài liệu khớp từ bộ sưu tập sản phẩm được bao gồm trong bộ sưu tập đơn đặt hàng dưới dạng một mảng.