join nhiều document trong mongodb thế nào



  • Trong Mongodb 3.2 có lookup nhưng nó chỉ join được với 2 document, còn nếu nhiều hơn thì làm thế nào vậy mọi người. Ví dụ mình có 3 document này:

    order
    {
    "_id" : ObjectId("57cafab8cc2db027940cf0c9"),
    "note" : "ghi chú"
    }

    order detail
    {
    "_id" : ObjectId("57cafab8cc2db027940cf0ca"),
    "productId" : ObjectId("57bb0c97253ab7d010b8ba4a"),
    "orderId" : ObjectId("57cafab8cc2db027940cf0c9"),
    "price" : NumberInt(150000),
    "quantity" : NumberInt(1)
    }

    product
    {
    "_id" : ObjectId("57bb0c97253ab7d010b8ba4a"),
    "productName" : "banh keo",
    "price" : NumberInt(100000)
    }

    Bây giờ mình muốn join lại với nhau thành 1 document thế này:
    result
    {
    "orderDetailId" : ObjectId("57cafab8cc2db027940cf0ca"),
    "productId" : ObjectId("57bb0c97253ab7d010b8ba4a"),
    "orderId" : ObjectId("57cafab8cc2db027940cf0c9"),
    "price" : NumberInt(150000),
    "quantity" : NumberInt(1),
    "productName" : "banh keo",
    "price" : NumberInt(100000),
    "note" : "ghi chu"
    }

    mình không muốn tạo ra 1 document, rồi ghi kết quả vào đó, có cách nào dùng truy vấn mà không export ra 1 document không ha



  • chờ hoài không thấy ai trả lời, mò rồi cũng ra được cách làm, up lên cho ai cần sau này, cái lookup trong mongodb co thể sử dụng được nhiều lần trong 1 câu query, vấn đề nằm ở đây.

    db.orderdetail.aggregate([
    {
    $lookup: {
    from: "order",
    localField: "orderId",
    foreignField: "_id",
    as: "order_detail"
    },
    $lookup: {
    from: "product",
    localField: "productId",
    foreignField: "_id",
    as: "product_detail"
    }
    }
    ])

    cơ bản là nó vậy, bác nào cần thì dùng $project để lọc bớt dữ liệu, nếu có dùng $project thì để dưới cùng nhé, tại nó lookup xong mới tìm được, để trên tìm không ra đâu



  • Bạn có thể dùng populate ở mongoose nè http://mongoosejs.com/docs/populate.html



  • Hỏi ngu cái, với 1 db phải join nhiều như vậy thì sao bạn lại chọn mongo?



  • Trong trường hợp này, em dùng sub document chứ không chơi join như thế này :D



  • @stmiizz Tại minh muốn sau thống kê cho nó dễ, với lại từ sql chuyển qua nó vẫn còn tư tưởng relationship :( không biết dùng sub nhiều quá sau thống kê có dễ không


Log in to reply