MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

jak zaimplementować funkcję jak left join mysql w manguście

To, co próbujesz zrobić, nie jest możliwe, ponieważ na mongodb nie ma oświadczenia dołączającego.

Możesz to osiągnąć na dwa sposoby:

1 - Według DBRefs: Zmiana schematu na taki, który zawiera wszystkie informacje o użytkowniku i nie dzieli ich na dwa różne schematy, jak to robisz, zobacz zdenormalizowany . Następnie możesz użyć Populacja funkcja, aby uzyskać wszystkie dane osób.

2 - Według odniesień ręcznych: Drugim rozwiązaniem jest wykonanie drugiego wywołania bazy danych, pobierając dane personProfile przy użyciu identyfikatora użytkownika jako filtra.

Przykład 1:

W ten sposób możesz uzyskać wszystkie dane osób bez drugiego wywołania bazy danych.

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
}

Zauważ, że używam typu Schema.Types.ObjectId a nie liczba . W ten sposób możesz przypisać nową wartość do _creator przekazując _id lub obiekt osoby a mangusta przekonwertuje obiekt na jego _id. Na przykład możesz opublikować coś takiego jak

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

... a mangusta przekształci się w

{
    _creator : 123123123123,
    title    : 'Mr'
}

Przykład 2:

W ten sposób Twoje dane są nadal znormalizowane i możesz uzyskać wszystkie dane osób za pomocą drugiego połączenia.

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. Zrób coś, jeśli nic nie zostanie znalezione za pomocą .find() mangusta

  2. Wydajność przy wkładaniu do mongodb (pymongo)

  3. Nie można zainstalować wtyczki Grails MongoDB

  4. Rails Mongoid nie może się uwierzytelnić - błąd 13:brak autoryzacji dla zapytania w my_db.my_collection

  5. Kolekcja Mongodb jako dynamiczna