Bạn sẽ truy vấn một mảng tài liệu nhúng trong mongodb như thế nào?

Chủ đề mà chúng ta quan tâm hôm nay là về truy vấn tài liệu nhúng trong MongoDB. Tài liệu có thể hấp thụ các mức độ phức tạp khác nhau. Thông thường, một cấu trúc cơ sở dữ liệu phức tạp bao gồm nhiều bộ sưu tập được điền vào nhau cùng với việc bao gồm các tài liệu được nhúng

Cấu trúc phức tạp này đôi khi dẫn đến khó khăn trong việc quản lý dữ liệu. Các cá nhân, đặc biệt là những người mới lập trình và MongoDB thậm chí có thể gặp khó khăn trong thời gian đầu. May mắn thay, có một lối thoát

Hướng dẫn này sẽ giúp bạn truy vấn các tài liệu được nhúng trong MongoDB bất kể cơ sở dữ liệu của bạn chứa dữ liệu lớn đến mức nào. Tôi sẽ giải thích bằng nhiều ví dụ để giúp bạn tìm hiểu cách truy vấn tài liệu nhúng trong MongoDB

Khi thiết kế dữ liệu kiểu Embedded thì chúng ta không cần tạo ra nhiều bộ sưu tập để lưu trữ, mà sẽ lưu trữ tất cả vào một bộ sưu tập

ví dụ có hàng tồn kho bộ sưu tập

    { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
    { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
    { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
    { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
    { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }

ở trên thì thay vì công việc phải tạo ra 2 bộ sưu tập rồi lưu kiểu tham chiếu thì chỉ cần lưu ở 1 bảng duy nhất. Trong phạm vi bài viết này cũng sẽ chỉ cung cấp một số ví dụ về viêc query Embedded data trong mongodb. Còn trên thực tế khi làm việc thì tùy theo yêu cầu mà có những yêu cầu khác nhau

Đi nào

  1. **Truy vấn tài liệu được lồng trong một mảng**

    Trong ví dụ dưới đây sẽ trả về tất cả các tài liệu có các phần tử khớp với một tài liệu cụ thể

    db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } )
    

    kết quả trả về

    { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] }
    

    Chú thích. Khi truy vấn mà một phần tử được lưu dưới dạng nhúng/lồng nhau thì yêu cầu phải khớp chính xác với tài liệu được chỉ định, bao gồm cả thứ tự các trường trong tài liệu được chỉ định

    db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } )
    # không có kết quả nào được tìm thấy
    
  2. Chỉ định một điều kiện truy vấn trên một trường trong một mảng tài liệu

    Muốn tìm kiếm các tài liệu với điều kiện cho một trường được nhúng trong một mảng tài liệu. Ta will use dấu (. ) để nối tên của trường mảng với tên của trường trong tài liệu lồng nhau. ví dụ

    db.inventory.find( { 'instock.qty': { $lte: 20 } } )
    

    Trong ví dụ trên sẽ trả lại tất cả các tài liệu mà mảng instock có ít nhất một tài liệu nhúng có trường số lượng có giá trị nhỏ hơn hoặc bằng 20

    Có thể sử dụng chỉ mục của mảng để chỉ định mục đích tìm kiếm ở tài liệu thứ bao nhiêu trong tài liệu lồng nhau

    db.inventory.find( { 'instock.0.qty': { $lte: 20 } } )
    
  3. Chỉ định nhiều điều kiện cho mảng tài liệu

    Trong phần 1 ở trên có phần chú ý khi chỉ sử dụng find thì yêu cầu về thứ tự các trường trong bộ sưu tập được chỉ định. Nếu không muốn chú ý đến thứ tự vấn đề của trường thì hãy sử dụng elemMatch

    db.inventory.find( { "instock": { $elemMatch: { qty: 5, warehouse: "A"}}})
    #result:
    { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15}]}
    

    There could connect with other Query Operator in elemMatch

    db.inventory.find( { "instock": { $elemMatch: { qty: { $gt: 10, $lte: 20}}}})
    #result
    {item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 }]}
    {item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 }]}
    {item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 }
    
  4. đếm số phần tử tài liệu trong mảng tổng hợp sử dụng tài liệu

    Tập hợp có thể hiểu là tập hợp. Các Aggregation operation xử lý các bản ghi dữ liệu và trả về các kết quả đã được tính toán. Các phép toán tập hợp nhóm các giá trị từ nhiều tài liệu lại với nhau và có thể thực hiện nhiều phép toán đa dạng trên dữ liệu đã được nhóm đó để trả về một kết quả duy nhất

    ________số 8

    Trong câu truy vấn ở trên đích là đêm ra trong mỗi tài liệu thì instock có bao nhiêu phần tử ở trong đó. Đó là một câu truy vấn đơn giản, có thể kết hợp nhiều Aggregation Pipeline Operator và Aggregation Pipeline Stages để thực hiện các lệnh phức tạp hơn. Một ví dụ khác

    db.inventory.aggregate( [
       {$unwind: { path: "$instock", preserveNullAndEmptyArrays: true}},
       {$project: {_id: 1,
            all_stock_count: {
                $cond: [{$gt: ["$instock", 0]}, 1, 0]
            },
            deal_match: {
                $cond: [{
                    $and: [
                        {$gte: ["$instock.qty", 15]},
                        {$eq: ["$instock.warehouse", "A"]},
                    ]}, 1, 0
                ],
            }
        }},
        {$group: {_id: "$_id", all_stock_count: {$sum: "$all_stock_count"}, deal_match: {$sum: "$deal_match"}}}
    ] )
    

    Trong ví dụ trên được đếm trong từng tài liệu xem từng tài liệu thì mảng instock có bao nhiêu phần tử,trong mỗi tài liệu thì có bao phần tử tử đối xứng điều kiện là qty lớn hơn 15 và kho là A

Mongodb cung cấp rất nhiều cách để chúng ta có thể thao tác và xử lý nhưng dữ liệu được lưu dưới dạng Array of Embedded Documents. Các bạn có thể tham khảo thêm tại đây. Cảm ơn đã đọc bài viết của mình

Phương pháp ưa thích để truy vấn tài liệu nhúng trong MongoDB là gì?

Sử dụng toán tử $elemMatch để truy vấn tài liệu được nhúng. Sử dụng toán tử điều kiện để truy vấn tài liệu nhúng. Sử dụng Trình tạo truy vấn trực quan để truy vấn tài liệu được nhúng

Tài liệu nhúng trong MongoDB là gì?

MongoDB cung cấp cho bạn một tính năng thú vị được gọi là Tài liệu nhúng hoặc Tài liệu lồng nhau. Tài liệu nhúng hoặc tài liệu lồng nhau là những loại tài liệu chứa tài liệu bên trong tài liệu khác .

Bạn có thể có một mảng đối tượng trong MongoDB không?

Trong mô hình tài liệu của MongoDB, a 1. N dữ liệu mối quan hệ có thể được lưu trữ trong một bộ sưu tập ; . Dữ liệu liên quan được lưu trữ cùng nhau và có thể được truy cập (và cập nhật) cùng nhau. Các nhận xét được lưu trữ dưới dạng một mảng; .

Phương pháp nào được sử dụng để truy vấn dữ liệu từ bộ sưu tập MongoDB?

Để truy vấn dữ liệu từ bộ sưu tập MongoDB, bạn cần sử dụng phương thức find() của MongoDB.