Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Bài viết này sẽ minh họa thông qua các ví dụ về cách khắc phục lỗi Mongoose Join Multiple Collections

    var mongoose = require('mongoose');
    var userCollection = require('./user');//import user model file
    var resources = {
    nick_name: "$nick_name",
    email: "$email"};

    userCollection.aggregate([{
            $group: resources
        }, {
            $lookup: {
                from: "Comments", // collection to join
                localField: "_id",//field from the input documents
                foreignField: "user_id",//field from the documents of the "from" collection
                as: "comments"// output array field
            }
        }, {
            $lookup: {
                from: "Post", // from collection name
                localField: "_id",
                foreignField: "user_id",
                as: "posts"
            }
        }],function (error, data) {
         return res.json(data);
     //handle error case also
});

Vấn đề với Mongoose Join Multiple Collections có thể được giải quyết theo nhiều cách khác nhau, tất cả đều được nêu trong danh sách sau

const userSchema = new Schema({  
    nick_name:{type:String},  
    email: {  
        type: String,  
        trim: true,  
        required: '{PATH} is required!',
        index: true,
    },
    comments: [{ type: Schema.Types.ObjectId, ref:'Comment' }],
    posts: [{ type: Schema.Types.ObjectId, ref:'Post' }]
}, {timestamps: true});

mongoose.model('User', userSchema);

Như chúng ta đã thấy, mã sự cố Tham gia nhiều bộ sưu tập Mongoose đã được giải quyết bằng cách sử dụng một số phiên bản khác nhau

Chúng tôi có thể tham gia 2 bộ sưu tập trong MongoDB không?

Để thực hiện MongoDB Tham gia hai bộ sưu tập, bạn phải sử dụng toán tử tra cứu $. Nó được định nghĩa là một giai đoạn thực hiện nối ngoài bên trái với một bộ sưu tập khác và hỗ trợ lọc dữ liệu từ các tài liệu đã nối. 14-Feb-2022

Làm cách nào để tham gia hai bộ sưu tập trong MongoDB bằng nút JS?

Join Collections MongoDB không phải là cơ sở dữ liệu quan hệ, nhưng bạn có thể thực hiện phép nối ngoài bên trái bằng cách sử dụng giai đoạn $lookup. Giai đoạn tra cứu $ cho phép bạn chỉ định bộ sưu tập nào bạn muốn kết hợp với bộ sưu tập hiện tại và trường nào sẽ khớp

Làm cách nào để tham gia hai cơ sở dữ liệu trong MongoDB?

Định cấu hình Nhiều kết nối

  • Tạo db. sơ đẳng. tập tin js
  • Tạo db. sơ trung. tập tin js
  • Tạo chỉ mục. tập tin js. Tệp này sẽ xuất tất cả các kết nối cơ sở dữ liệu
  • Cấu trúc thư mục của bạn sẽ trông như thế này
  • Khởi tạo kết nối cơ sở dữ liệu trong máy chủ. js như Bạn sẽ làm với kết nối mặc định

Tham gia trong Mongoose là gì?

Cũng giống như cơ sở dữ liệu SQL, MongoDB có tập hợp giống như liên kết được kết hợp với Mongoose cho phép bạn tham chiếu tài liệu trong các bộ sưu tập khác bằng ID tham chiếu

Làm cách nào để kết hợp dữ liệu từ nhiều bộ sưu tập thành một bộ sưu tập?

Kết hợp hai bộ sưu tập thành một bộ sưu tập bằng MongoDB

  • Sử dụng giai đoạn tổng hợp $lookup để nối hai bộ sưu tập
  • Sử dụng toán tử đường ống để nối hai tập hợp dựa trên điều kiện đã chỉ định
  • Sử dụng toán tử $unwind để làm phẳng mảng trước khi gắn nó vào tài liệu kết quả

Làm cách nào bạn có thể truy vấn dữ liệu trên nhiều bộ sưu tập trong MongoDB?

đã liên kết

  • Truy vấn MongoDB tìm giá trị tối đa trong hai ngày qua
  • Mongodb lấy tên bộ sưu tập phụ
  • Pymongo chọn giá trị trên nhiều bộ sưu tập có điều kiện và nhóm theo ngày
  • Truy vấn nhiều bộ sưu tập cùng một lúc với MongoDB bằng cách sử dụng tổng hợp, so khớp và tra cứu
  • Truy vấn MongoDb trên hai bộ sưu tập

Tập hợp trong MongoDB là gì?

Tập hợp trong MongoDB là gì? . Các giai đoạn tạo nên cái được gọi là đường ống dẫn. Các giai đoạn trong quy trình có thể lọc, sắp xếp, nhóm, định hình lại và sửa đổi các tài liệu đi qua quy trình. 25-Mar-2022

Sharding trong MongoDB là gì?

Sharding là một phương pháp phân phối dữ liệu trên nhiều máy. MongoDB sử dụng sharding để hỗ trợ triển khai với tập dữ liệu rất lớn và hoạt động có thông lượng cao. Hệ thống cơ sở dữ liệu với tập dữ liệu lớn hoặc ứng dụng thông lượng cao có thể thách thức khả năng của một máy chủ

Là một nhóm của một bộ sưu tập trong MongoDB?

MongoDB lưu trữ các bản ghi dữ liệu dưới dạng tài liệu (cụ thể là tài liệu BSON) được tập hợp lại với nhau trong các bộ sưu tập. Cơ sở dữ liệu lưu trữ một hoặc nhiều bộ sưu tập tài liệu

Làm cách nào để tham gia hai bảng trong nút JS?

Nối hai hoặc nhiều bảng Bạn có thể kết hợp các hàng từ hai hoặc nhiều bảng, dựa trên một cột có liên quan giữa chúng, bằng cách sử dụng câu lệnh THAM GIA

Nếu bạn sử dụng MongoDB, có lẽ bạn đã hiểu tất cả những gì cần biết về nó, vì vậy tôi khuyên bạn nên bỏ qua bài đăng blog này ở đây, nhưng nếu bạn mới bắt đầu với MongoDB, hãy xem bài đăng blog này như một bài giới thiệu nhẹ nhàng 😉

Trước khi bắt đầu

Bài đăng trên blog này giả định rằng bạn đã có một tài khoản được thiết lập với MongoDB. Hãy nhớ rằng nếu bạn chưa có, bạn có thể tạo một cái miễn phí tại đây và MongoDB có một bậc miễn phí mà bạn có thể thiết lập khi tạo tài khoản của mình

Bạn sẽ sử dụng dữ liệu mẫu từ MongoDB để tìm hiểu cách thực hiện tổng hợp và tạo bộ sưu tập mới

Làm quen với dữ liệu

Trong Mongo, một tập dữ liệu được gọi là một bộ sưu tập; . Trong khi các bản ghi trong bảng tính là các dòng, thì trong MongoDB, một bản ghi được gọi là tài liệu. Bạn sẽ sử dụng bộ sưu tập sample_mflix chứa phim, nhận xét, người dùng, v.v.

Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Tạo một bộ lọc cơ bản

Mục tiêu của bạn là tạo một bộ sưu tập chứa tất cả các bình luận mà mỗi bộ phim nhận được vào tháng 8 năm 2002

Bắt đầu bằng cách vào cơ sở dữ liệu của dự án. Dự án của tôi có tên là “Dự án 0” và có cơ sở dữ liệu “Ví dụ” bao gồm ba cơ sở dữ liệu và 15 bộ sưu tập

Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Mỗi dự án có một tập hợp các tab, một trong số đó là tab “Bộ sưu tập”, nơi bạn có thể xem cơ sở dữ liệu và tài liệu trong mỗi bộ sưu tập, như thể hiện trong hình trên. Từ trong tab Bộ sưu tập, bạn có thể xem dữ liệu và thực hiện các truy vấn đơn giản nếu muốn

{date: {$gte:ISODate('2002-08-18')}}

Ví dụ: truy vấn trên hiển thị mọi tài liệu có giá trị ngày sau ngày 18 tháng 8 năm 2002

Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Sử dụng các truy vấn như vậy thật tuyệt khi xem kết quả sơ bộ của bộ sưu tập mà bạn đang cố gắng xây dựng. Nhưng để thực sự tạo bộ sưu tập, chúng ta cần sử dụng tập hợp

Xây dựng tập hợp

Tập hợp là một cách bạn có thể xây dựng các bộ sưu tập bên trong MongoDB và có một tab dành cho điều đó, như minh họa trong hình bên dưới

Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Để xem tab Tổng hợp, bạn cần nhấp vào bộ sưu tập mà bạn muốn điều tra hoặc sử dụng làm cơ sở cho bộ sưu tập mới của mình. Trên tab tổng hợp, bạn sẽ thấy trình tạo đường dẫn. Một quy trình là một tập hợp các bước; . Bạn sẽ làm ba giai đoạn

  1. Lọc nhận xét dựa trên ngày tháng;
  2. Thêm chi tiết của bộ phim vào mỗi bình luận;
  3. Xuất kết quả vào một bộ sưu tập hoàn toàn mới

Lọc nhận xét

Để tránh xử lý dữ liệu không cần thiết, tức là dữ liệu nằm ngoài cửa sổ ngày quan tâm của bạn, điều đầu tiên bạn muốn làm là tìm các nhận xét trong khoảng thời gian cụ thể đó (tháng 8 năm 2002)

Trên trình đơn thả xuống cho giai đoạn đầu tiên, hãy chọn toán tử $match; . Lưu ý rằng khi bạn chọn toán tử, Mongo sẽ tự động điền vào trường có thể chỉnh sửa với cấu trúc tiêu chuẩn cho toán tử đó

Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Bây giờ bạn cần thêm đoạn mã sau vào phần truy vấn ở đó

Khi đã xong, bạn sẽ thấy kết quả mẫu sẽ bắt đầu hiển thị

Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Bây giờ chúng ta hãy chia nhỏ từng bước của hoạt động đó, phải không?

  1. Dòng 1-4. Chỉ nhận xét, chủ yếu để giải thích toán tử là gì. Lưu ý rằng MQL là viết tắt của MongoDB Query Language;
  2. Dòng 6 (date:). tương ứng với trường bạn muốn sử dụng để lọc ngày của mình;
  3. Dòng 7 ($gte:ISODate("2002-08-01")). dòng này sử dụng toán tử $gte để lấy tất cả các ngày sau ngày được trả về ở định dạng ISODate;
  4. Dòng 8 (______8). dòng này sử dụng toán tử $lt để lấy tất cả các ngày trước ngày được trả về ở định dạng ISODate

Kết quả toán tử này sẽ là tất cả các tài liệu từ ngày 1 tháng 8 đến ngày 31 tháng 8 năm 2002

Thêm thông tin phim vào mỗi bình luận

Bạn sẽ nhận thấy rằng các nhận xét không có thông tin về phim, nhưng có số nhận dạng phim (ID), như trong hình bên dưới

Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Bao gồm thông tin phim trong các nhận xét được lọc mà bạn vừa nhận được từ giai đoạn đầu tiên là bước thứ hai trong quá trình tổng hợp của chúng tôi. Nhấp vào nút “Thêm giai đoạn” bên dưới giai đoạn đầu tiên để bắt đầu thêm thông tin phim vào bộ sưu tập bằng cách sử dụng toán tử

const userSchema = new Schema({  
    nick_name:{type:String},  
    email: {  
        type: String,  
        trim: true,  
        required: '{PATH} is required!',
        index: true,
    },
    comments: [{ type: Schema.Types.ObjectId, ref:'Comment' }],
    posts: [{ type: Schema.Types.ObjectId, ref:'Post' }]
}, {timestamps: true});

mongoose.model('User', userSchema);
0

Toán tử

const userSchema = new Schema({  
    nick_name:{type:String},  
    email: {  
        type: String,  
        trim: true,  
        required: '{PATH} is required!',
        index: true,
    },
    comments: [{ type: Schema.Types.ObjectId, ref:'Comment' }],
    posts: [{ type: Schema.Types.ObjectId, ref:'Post' }]
}, {timestamps: true});

mongoose.model('User', userSchema);
0 thực hiện “nối ngoài bên trái”. Hãy nghĩ về nó như một "tham gia được lọc". Dựa trên bộ sưu tập ở “bên trái” (bình luận), hãy chọn tài liệu ở bên “phải” (phim) khớp với một trường nhất định trong cả hai trường, trong trường hợp này là id phim. Bằng cách này, chúng tôi không phải quan tâm đến việc xóa phim không có nhận xét, nhưng tất cả nhận xét từ cửa sổ thời gian

Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Trên trình đơn thả xuống cho giai đoạn thứ hai, hãy chọn toán tử

const userSchema = new Schema({  
    nick_name:{type:String},  
    email: {  
        type: String,  
        trim: true,  
        required: '{PATH} is required!',
        index: true,
    },
    comments: [{ type: Schema.Types.ObjectId, ref:'Comment' }],
    posts: [{ type: Schema.Types.ObjectId, ref:'Post' }]
}, {timestamps: true});

mongoose.model('User', userSchema);
0, như thể hiện trong hình trên. Một lần nữa, Mongo sẽ điền sẵn mã mẫu của toán tử và bạn có thể cập nhật phần mã bằng mã bên dưới

Một lần nữa, hãy chia nhỏ từng bước của hoạt động đó

  1. Dòng 1-9. Chỉ nhận xét, chủ yếu để giải thích toán tử là gì;
  2. Dòng 11 (sample_mflix1). Vì phía bên trái trong bảng điều khiển là bộ sưu tập mà bạn đang chạy quy trình, nên đây là nơi bạn xác định phía “bên phải” của liên kết, vì vậy bạn đã chọn bộ sưu tập “phim” để thêm thông tin phim vào nhận xét;
  3. Dòng 12 (sample_mflix2). trường trên bộ sưu tập hiện tại (bình luận) tương ứng với một trường trong bộ sưu tập (phim) khác;
  4. Dòng 13 (sample_mflix3). lĩnh vực trên bộ sưu tập khác;
  5. Dòng 14 (sample_mflix4). tên trường để thêm thông tin vào, lưu ý rằng tra cứu sẽ thêm thông tin dưới dạng một mảng

Và bạn sẽ thấy kết quả hiển thị như trong hình bên dưới

Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Tất cả các thao tác dữ liệu được thực hiện. Đã đến lúc lưu kết quả và thực sự tạo bộ sưu tập mới của bạn

Lưu kết quả

Một lần nữa, hãy nhấp vào nút “Thêm giai đoạn” để tạo một giai đoạn đưa kết quả vào một bộ sưu tập mới và trên menu thả xuống cho giai đoạn thứ ba, hãy chọn toán tử sample_mflix5

Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Bây giờ hãy cập nhật mã trong trường mã trong phần ra với mã bên dưới

Hãy phá vỡ phần này

  1. Dòng 1-4. Chỉ nhận xét, chủ yếu để giải thích toán tử là gì;
  2. Dòng 5 (______36). là tên cho bộ sưu tập mới;

Sau khi điền tên của bộ sưu tập mới, bạn nên nhấp vào nút “Lưu tài liệu”

Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Sau khi bộ sưu tập được tạo (có thể mất vài giây), bạn sẽ thấy một thông báo cho biết rằng các tài liệu đã được lưu giữ trong bộ sưu tập và liên kết “Chuyển đến bộ sưu tập” mà bạn nên nhấp vào

Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Nhấp vào liên kết “Chuyển đến bộ sưu tập” sẽ mở một tab mới. Nếu bạn không muốn xem tab khác, hãy làm mới trang và bạn sẽ thấy sample_mflix7 hiển thị trên menu bên trái

Làm cách nào để tham gia hai bộ sưu tập trong mongodb?

Bây giờ bộ sưu tập của bạn đã sẵn sàng, bạn có thể xem dữ liệu phân tích bộ sưu tập, như số lượng hoạt động đã được ghi lại và dung lượng chiếm dụng trong bộ lưu trữ của chúng tôi

Tóm tắt lại

Bây giờ bạn đã biết cách tạo bộ sưu tập bằng cách tổng hợp hai bộ sưu tập khác bằng đường dẫn. Bạn cũng biết

Chúng ta có thể tham gia MongoDB không?

May mắn thay, Việc tham gia MongoDB có thể được thực hiện trong MongoDB 3. 2 vì nó giới thiệu một thao tác Tra cứu mới có thể thực hiện các thao tác Tham gia trên Bộ sưu tập.

MongoDB có thể tham gia hai bảng không?

THAM GIA là một trong những tính năng khác biệt chính giữa cơ sở dữ liệu SQL và NoSQL. Trong cơ sở dữ liệu SQL, chúng ta có thể thực hiện THAM GIA giữa hai bảng trong cùng một cơ sở dữ liệu hoặc khác nhau. Tuy nhiên, đây không phải là trường hợp của MongoDB vì nó cho phép THAM GIA hoạt động giữa hai tập hợp trong cùng một cơ sở dữ liệu .

MongoDB có hỗ trợ mối quan hệ giữa các bộ sưu tập không?

Mối quan hệ thực thi tính toàn vẹn của dữ liệu trong cơ sở dữ liệu quan hệ. Tuy nhiên, không có mối quan hệ nào giữa các tài liệu trong MongoDB và các cơ sở dữ liệu NoSQL khác .

Hợp nhất trong MongoDB là gì?

$merge chèn tài liệu trực tiếp vào bộ sưu tập đầu ra . Trước MongoDB 4. 2. 2, khi các điều kiện này cho giai đoạn $merge được đáp ứng, quy trình bán hàng được chỉ định trong trường whenMatched được thực thi với một tài liệu đầu vào trống. Tài liệu kết quả từ đường ống được chèn vào bộ sưu tập đầu ra.