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

Làm thế nào để truy vấn cấu trúc cây một cách đệ quy với MongoDB?

Tùy thuộc vào trường hợp sử dụng của bạn, MongoDB v3.4 cung cấp một đường dẫn tổng hợp toán tử được gọi là $ graphLookup . Toán tử tổng hợp có thể thực hiện tìm kiếm đệ quy trên một tập hợp. Xem thêm definiton trên định nghĩa $ graphLookup .

Sử dụng hệ thống phân cấp và giá trị tài liệu của bạn ở trên làm ví dụ, bạn có thể thử chạy tập hợp bên dưới:

db.collectionName.aggregate([

                {$unwind:{
                        path:"$childrenIdList", 
                        preserveNullAndEmptyArrays: true}
                  }, 
                {$graphLookup:{
                        from:"collectionName", 
                        startWith:"$_id", 
                        connectFromField:"_id", 
                        connectToField:"childrenIdList", 
                        as:"myparents",  
                        restrictSearchWithMatch: {"_id"}}
                  }, 
                {$match: {"_id": 7 } },
                {$group:{
                        _id:"$_id", 
                        parents:{$addToSet:"$myparents._id"}
                  }}
]);

Ở trên sẽ trả về kết quả như sau:

{ "_id" : 7, "parents" : [ [ 1, 2, 4 ] ] }

Phải nói rằng, nếu bạn có một bộ sưu tập lớn, truy vấn trên có thể không hiệu quả vì bạn sẽ thực hiện $ unwind trên mỗi tài liệu và sẽ không thể sử dụng các chỉ mục. Theo gợi ý của những người khác, bạn nên xem xét lại cấu trúc mô hình tài liệu của mình. Xem Cấu trúc cây mô hình dữ liệu . Tối ưu hóa dựa trên logic ứng dụng và trường hợp sử dụng truy vấn của bạn, đồng thời để lược đồ tài liệu linh hoạt tuân theo.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Không thể tạo không gian tên trong giao dịch nhiều tài liệu (MongoDB 4.0, Spring Data 2.1.0, Spring Boot)

  2. Các đối số tổng hợp trong Mongodb cho $ lookup phải là chuỗi

  3. Tổng hợp với $ sum trong mongodb

  4. Mongoose cập nhật hoặc chèn nhiều tài liệu

  5. Nâng cấp không hoạt động cho updateOne BulkWrite v3.4