Hướng dẫn mongodb lookup examples - các ví dụ về tra cứu mongodb
Lời nói đầu: Mới cho đường ống tổng hợp? Kiểm tra lời giải thích 5 phút của chúng tôi trước khi lặn vào các ví dụ về tra cứu $ này .... New to the aggregation pipeline? Check out our 5 minute explanation before diving into these $lookup examples.... Ngoài ra, hãy chắc chắn để hiểu lập chỉ mục và ý nghĩa hiệu suất của đó trước khi xem xét các ví dụ này ... $ Tra cứu cho phép bạn thực hiện các tham gia trên các bộ sưu tập trong cùng một cơ sở dữ liệu. $ Tra cứu hoạt động bằng cách trả lại các tài liệu từ bộ sưu tập "được tham gia" dưới dạng một phần phụ của bộ sưu tập gốc. $ Tra cứu hỗ trợ cả hai trận đấu bình đẳng cơ bản cũng như các phần phụ không tương thích. Chúng tôi sẽ cung cấp một ví dụ về từng kịch bản. Các ví dụ dựa trên dữ liệu mẫu này ... Bộ sưu tập bài{ "title" : "my first post", "author" : "Jim", "likes" : 5 }, { "title" : "my second post", "author" : "Jim", "likes" : 2 }, { "title" : "hello world", "author" : "Joe", "likes" : 3 } Bộ sưu tập bình luận{ "postTitle" : "my first post", "comment" : "great read", "likes" : 3 }, { "postTitle" : "my second post", "comment" : "good info", "likes" : 0 }, { "postTitle" : "my second post", "comment" : "i liked this post", "likes" : 12 }, { "postTitle" : "hello world", "comment" : "not my favorite", "likes" : 8 }, { "postTitle" : "my last post", "comment" : null, "likes" : 0 } Lưu ý cách chúng tôi có hai bài viết và nhận xét của bộ sưu tập. Trường Posttitle trong bộ sưu tập bình luận tương ứng với trường tiêu đề trong bộ sưu tập bài viết. Cả bình luận và bài viết đều có thích. $ Tra cứu Ví dụ: Phù hợp với bình đẳngdb.posts.aggregate([ { $lookup: { from: "comments", localField: "title", foreignField: "postTitle", as: "comments" } } ]) Lưu ý cách $ Tra cứu lấy một tài liệu với các trường sau:
Truy vấn này trả về sau .. { "title" : "my first post", "author" : "Jim", "likes" : 5, "comments" : [ { "postTitle" : "my first post", "comment" : "great read", "likes" : 3 } ] }, { "title" : "my second post", "author" : "Jim", "likes" : 2, "comments" : [ { "postTitle" : "my second post", "comment" : "good info", "likes" : 0 }, { "postTitle" : "my second post", "comment" : "i liked this post", "likes" : 12 } ] }, { "title" : "hello world", "author" : "Joe", "likes" : 3, "comments" : [ { "postTitle" : "hello world", "comment" : "not my favorite", "likes" : 8 } ] } Lưu ý cách 3 tài liệu gốc từ bộ sưu tập bài được trả lại với một nhận xét trường bổ sung. Đối với mỗi bài đăng, mảng bình luận mới này có tất cả các tài liệu từ bộ sưu tập bình luận có trường posttitle phù hợp với trường tiêu đề của bài đăng. db.posts.aggregate([ { $lookup: { from: "comments", let: { post_likes: "$likes", post_title: "$title"}, pipeline: [ { $match: { $expr: { $and: [ { $gt: [ "$likes", "$$post_likes"] }, { $eq: ["$$post_title", "$postTitle" ] } ] } } } ], as: "comments" } } ]) Lưu ý cách $ Tra cứu mất các trường hơi khác nhau. Cụ thể các lĩnh vực địa phương và nước ngoài đã được thay thế bằng:
Lưu ý cách chúng tôi xác định hai biến trong biểu thức LET. Chúng tôi xác định post_like và post_title để chúng tôi có thể tham chiếu các tài liệu đầu vào trong giai đoạn đường ống. Đây là cách duy nhất để chúng tôi so sánh giữa các bộ sưu tập khác nhau ... { $gt: [ "$likes", "$$post_likes"] }, { $eq: ["$$post_title", "$postTitle" ] } Lưu ý cách chúng tôi sử dụng $$ để chỉ các biến chúng tôi đã xác định trong LET. Chúng tôi tham khảo các trường trong bộ sưu tập nước ngoài với một $. Truy vấn này trả về sau .. { "title" : "my first post", "author" : "Jim", "likes" : 5, "comments" : [] }, { "title" : "my second post", "author" : "Jim", "likes" : 2, "comments" : [ { "postTitle" : "my second post", "comment" : "i liked this post", "likes" : 12 } ] }, { "title" : "hello world", "author" : "Joe", "likes" : 3, "comments" : [ { "postTitle" : "hello world", "comment" : "not my favorite", "likes" : 8 } ] } Lưu ý cách 3 tài liệu gốc từ bộ sưu tập bài được trả lại với một nhận xét trường bổ sung. Đối với mỗi bài đăng, mảng bình luận mới này có tất cả các tài liệu từ bộ sưu tập bình luận có trường posttitle phù hợp với trường tiêu đề của bài đăng. Lưu ý cách $ Tra cứu mất các trường hơi khác nhau. Cụ thể các lĩnh vực địa phương và nước ngoài đã được thay thế bằng:Đặt (tùy chọn): Một biểu thức xác định các biến để sử dụng trong giai đoạn đường ống. Đây là cách bạn truy cập các trường từ bộ sưu tập đầu vào trong giai đoạn đường ống. Đường ống: Một đường ống tổng hợp để thực hiện trên bộ sưu tập để tham gia Lưu ý cách chúng tôi xác định hai biến trong biểu thức LET. Chúng tôi xác định post_like và post_title để chúng tôi có thể tham chiếu các tài liệu đầu vào trong giai đoạn đường ống. |