Hướng dẫn how do i join two tables in mongodb? - làm cách nào để tham gia hai bảng trong mongodb?

Tài liệu về nhà → Hướng dẫn sử dụng MongoDBMongoDB Manual

Bạn có thể sử dụng $lookup để tạo chế độ xem qua hai bộ sưu tập và sau đó chạy các truy vấn so với chế độ xem. Các ứng dụng có thể truy vấn chế độ xem mà không phải xây dựng hoặc duy trì các đường ống phức tạp.

Tạo hai bộ sưu tập mẫu, inventoryorders:

db.inventory.insertMany( [
{ prodId: 100, price: 20, quantity: 125 },
{ prodId: 101, price: 10, quantity: 234 },
{ prodId: 102, price: 15, quantity: 432 },
{ prodId: 103, price: 17, quantity: 320 }
] )
db.orders.insertMany( [
{ orderId: 201, custid: 301, prodId: 100, numPurchased: 20 },
{ orderId: 202, custid: 302, prodId: 101, numPurchased: 10 },
{ orderId: 203, custid: 303, prodId: 102, numPurchased: 5 },
{ orderId: 204, custid: 303, prodId: 103, numPurchased: 15 },
{ orderId: 205, custid: 303, prodId: 103, numPurchased: 20 },
{ orderId: 206, custid: 302, prodId: 102, numPurchased: 1 },
{ orderId: 207, custid: 302, prodId: 101, numPurchased: 5 },
{ orderId: 208, custid: 301, prodId: 100, numPurchased: 10 },
{ orderId: 209, custid: 303, prodId: 103, numPurchased: 30 }
] )

Lệnh này sử dụng db.createView() để tạo chế độ xem mới có tên sales dựa trên bộ sưu tập orders:

db.createView( "sales", "orders", [
{
$lookup:
{
from: "inventory",
localField: "prodId",
foreignField: "prodId",
as: "inventoryDocs"
}
},
{
$project:
{
_id: 0,
prodId: 1,
orderId: 1,
numPurchased: 1,
price: "$inventoryDocs.price"
}
},
{ $unwind: "$price" }
] )

Trong ví dụ:

  • Giai đoạn $lookup sử dụng trường

    db.createView( "sales", "orders", [
    {
    $lookup:
    {
    from: "inventory",
    localField: "prodId",
    foreignField: "prodId",
    as: "inventoryDocs"
    }
    },
    {
    $project:
    {
    _id: 0,
    prodId: 1,
    orderId: 1,
    numPurchased: 1,
    price: "$inventoryDocs.price"
    }
    },
    { $unwind: "$price" }
    ] )
    2 trong bộ sưu tập orders để "tham gia" các tài liệu trong bộ sưu tập inventory có các trường
    db.createView( "sales", "orders", [
    {
    $lookup:
    {
    from: "inventory",
    localField: "prodId",
    foreignField: "prodId",
    as: "inventoryDocs"
    }
    },
    {
    $project:
    {
    _id: 0,
    prodId: 1,
    orderId: 1,
    numPurchased: 1,
    price: "$inventoryDocs.price"
    }
    },
    { $unwind: "$price" }
    ] )
    2 phù hợp.

  • Các tài liệu phù hợp được thêm vào dưới dạng một mảng trong trường

    db.createView( "sales", "orders", [
    {
    $lookup:
    {
    from: "inventory",
    localField: "prodId",
    foreignField: "prodId",
    as: "inventoryDocs"
    }
    },
    {
    $project:
    {
    _id: 0,
    prodId: 1,
    orderId: 1,
    numPurchased: 1,
    price: "$inventoryDocs.price"
    }
    },
    { $unwind: "$price" }
    ] )
    6.

  • Giai đoạn

    db.createView( "sales", "orders", [
    {
    $lookup:
    {
    from: "inventory",
    localField: "prodId",
    foreignField: "prodId",
    as: "inventoryDocs"
    }
    },
    {
    $project:
    {
    _id: 0,
    prodId: 1,
    orderId: 1,
    numPurchased: 1,
    price: "$inventoryDocs.price"
    }
    },
    { $unwind: "$price" }
    ] )
    7 chọn một tập hợp con của các trường có sẵn.

  • Giai đoạn

    db.createView( "sales", "orders", [
    {
    $lookup:
    {
    from: "inventory",
    localField: "prodId",
    foreignField: "prodId",
    as: "inventoryDocs"
    }
    },
    {
    $project:
    {
    _id: 0,
    prodId: 1,
    orderId: 1,
    numPurchased: 1,
    price: "$inventoryDocs.price"
    }
    },
    { $unwind: "$price" }
    ] )
    8 chuyển đổi trường
    db.createView( "sales", "orders", [
    {
    $lookup:
    {
    from: "inventory",
    localField: "prodId",
    foreignField: "prodId",
    as: "inventoryDocs"
    }
    },
    {
    $project:
    {
    _id: 0,
    prodId: 1,
    orderId: 1,
    numPurchased: 1,
    price: "$inventoryDocs.price"
    }
    },
    { $unwind: "$price" }
    ] )
    9 từ một mảng thành giá trị vô hướng.

Các tài liệu trong chế độ xem sales là:

{ orderId: 201, prodId: 100, numPurchased: 20, price: 20 },
{ orderId: 202, prodId: 101, numPurchased: 10, price: 10 },
{ orderId: 203, prodId: 102, numPurchased: 5, price: 15 },
{ orderId: 204, prodId: 103, numPurchased: 15, price: 17 },
{ orderId: 205, prodId: 103, numPurchased: 20, price: 17 },
{ orderId: 206, prodId: 102, numPurchased: 1, price: 15 },
{ orderId: 207, prodId: 101, numPurchased: 5, price: 10 },
{ orderId: 208, prodId: 100, numPurchased: 10, price: 20 },
{ orderId: 209, prodId: 103, numPurchased: 30, price: 17 }

Để tìm tổng số tiền được bán của mỗi sản phẩm, truy vấn xem:

db.sales.aggregate( [
{
$group:
{
_id: "$prodId",
amountSold: { $sum: { $multiply: [ "$price", "$numPurchased" ] } }
}
}
] )

Đầu ra là:

[
{ _id: 102, amountSold: 90 },
{ _id: 101, amountSold: 150 },
{ _id: 103, amountSold: 1105 },
{ _id: 100, amountSold: 600 }
]

Làm thế nào để bạn tạo mối quan hệ giữa hai bảng trong MongoDB?

Để tạo mối quan hệ trong MongoDB, hoặc nhúng một tài liệu BSON trong một tài liệu khác hoặc tham khảo nó từ một tài liệu khác. Cơ sở dữ liệu MongoDB hoạt động khác nhau với cơ sở dữ liệu quan hệ. Điều này cũng đúng với các mối quan hệ.embed a BSON document within another, or reference it from another. MongoDB databases work differently to relational databases. This is also true of relationships.

Làm cách nào để hợp nhất bảng trong MongoDB?

1 - Kết nối với cơ sở dữ liệu SQL.....
2 - Xác định kết nối MongoDB đích.....
3 - Thêm bảng SQL.....
4 - Bản đồ SQL đến MongoDB.....
5-Xác định các mối quan hệ một-một.....
6 - Làm sạch bộ sưu tập MongoDB.....
7 - Chạy di chuyển SQL sang MongoDB.....
8-Kiểm tra lại bộ sưu tập MongoDB ..

Làm cách nào để tham gia hai bảng trong NoQuery?

Có hai cách mà bạn có thể tham gia các bảng trong cùng một hệ thống phân cấp trong cơ sở dữ liệu Oracle NoQuery ...
Điều khoản bàn lồng ..
Bên trái tham gia ..

Tại sao không có tham gia trong MongoDB?

Trong MongoDB, một mô hình phổ biến là nhúng.Trong quan hệ khi bình thường hóa mọi thứ bị chia thành các phần.Thông thường trong Mongo, những mảnh này cuối cùng là một tài liệu duy nhất, vì vậy dù sao cũng không cần tham gia.Often in mongo these pieces end up being a single document, so no join is needed anyway.