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

cách triển khai hàm như kết nối trái của mysql trong mongoose

Những gì bạn đang cố gắng thực hiện không thể thực hiện được vì không có câu lệnh tham gia nào trên mongodb.

Bạn có thể đạt được điều này bằng hai cách:

1 - Bởi DBRefs: Thay đổi lược đồ của bạn thành một lược đồ bao gồm tất cả thông tin người dùng và không chia chúng thành hai lược đồ khác nhau như bạn đang làm, hãy xem không chuẩn hóa . Sau đó, bạn có thể sử dụng Dân số chức năng lấy tất cả dữ liệu về người.

2 - Bằng cách tham khảo thủ công: Giải pháp thứ hai là thực hiện cuộc gọi thứ hai đến cơ sở dữ liệu để lấy dữ liệu personProfile bằng cách sử dụng userid làm bộ lọc.

Ví dụ 1:

Bằng cách này, bạn có thể lấy dữ liệu tất cả mọi người mà không cần cuộc gọi thứ hai đến cơ sở dữ liệu.

var personSchema = Schema({
  _id     : Number,
  name    : String,
  birthday: Date,
  profilelink: String,
  email: String
});

var storySchema = Schema({
  _creator : { type : Schema.Types.ObjectId, ref: 'Person' },
  title    : String
});

Story
.find()
.populate(['_creator'])
.exec(function(err, stories) {
    //do your stuff here
}

Lưu ý rằng tôi đang sử dụng loại Schema.Types.ObjectId chứ không phải Số . Bằng cách này, bạn có thể chỉ định một giá trị mới cho _creator vượt qua _id hoặc đối tượng người và mongoose sẽ chuyển đổi đối tượng thành _id của nó. Ví dụ:bạn có thể đăng một cái gì đó như

{
    _creator : {
        _id     : 123123123123,
        name    : 'Foo',
        birthday: '0000-00-00',
        profilelink: 'http://foo.bar',
        email: '[email protected]'
    },
    title    : 'Mr'
}

... và mongoose sẽ chuyển đổi thành

{
    _creator : 123123123123,
    title    : 'Mr'
}

Ví dụ 2:

Bằng cách này, dữ liệu của bạn vẫn được bình thường hóa và bạn có thể nhận được tất cả dữ liệu về người với cuộc gọi thứ hai.

Story
.find()
.exec(function(err, stories) {
    var arrayLength = stories.length;

    for (var i = 0; i < arrayLength; i++) {
        var story = stories[i];
        personProfile.findById(story._creator, function (err, person) {
            story._creator = person;
        }
    };
    // do your stuff here
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chèn hoặc cập nhật nhiều tài liệu trong MongoDB

  2. Làm cách nào để lưu một mảng tệp vào cơ sở dữ liệu mongoDB bằng cách sử dụng multer?

  3. Tạo biểu mẫu để chỉnh sửa tài liệu nhúng với MongoMapper

  4. Cách lưu trữ số lượng lớn trong MongoDB với Node.js

  5. error:tham số kiểu `D` phải được sử dụng làm tham số kiểu cho một số kiểu cục bộ