MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách chỉ trả về các tài liệu lồng nhau của một mảng từ tất cả các tài liệu

Bạn có thể thực hiện việc này bằng cách sử dụng .aggregate() và chủ yếu là $unwind nhà điều hành đường ống:

Trong MongoDB hiện đại 3.4 trở lên, bạn có thể sử dụng song song với $replaceRoot

Model.aggregate([
  { "$unwind": "$books" },
  { "$replaceRoot": { "newRoot": "$books" } }
],function(err,results) {

})

Trong các phiên bản trước đó, bạn chỉ định tất cả các trường bằng $project :

Model.aggregate([
  { "$unwind": "$books" },
  { "$project": {
    "_id": "$books._id",
    "pages": "$books.pages",
    "title": "$books.title"
  }}
],function(err,results) {

})

Vì vậy, $unwind là những gì bạn sử dụng để giải cấu trúc hoặc "không chuẩn hóa" các mục nhập mảng để xử lý. Hiệu quả, điều này tạo ra một bản sao của toàn bộ tài liệu cho mỗi thành viên của mảng.

Phần còn lại của nhiệm vụ là trả về "chỉ" những trường có trong mảng.

Đó không phải là một điều rất khôn ngoan để làm mặc dù vậy. Nếu mục đích của bạn là chỉ trả lại nội dung được nhúng trong một mảng của tài liệu, thì tốt hơn hết bạn nên đặt nội dung đó vào một bộ sưu tập riêng.

Nó tốt hơn nhiều cho hiệu suất, tách tất cả các tài liệu từ một bộ sưu tập bằng khung tổng hợp, chỉ để liệt kê các tài liệu đó từ mảng mà thôi.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Lưu trữ Enums dưới dạng chuỗi trong MongoDB

  2. Cách bảo mật MongoDB bằng tên người dùng và mật khẩu

  3. Làm thế nào để chuyển đổi một chuỗi thành ObjectId trong trình điều khiển gốc nodejs mongodb?

  4. Nhóm MongoDB và tính tổng với id làm khóa

  5. Cách sử dụng câu lệnh SQL LIKE trong MongoDB