MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

come implementare la funzione come left join di mysql in mongoose

Quello che stai cercando di fare non è possibile perché non c'è una dichiarazione di unione su mongodb.

Puoi ottenerlo in due modi:

1 - Per DBRefs: Modificando lo schema in uno che includa tutte le informazioni sull'utente e non le divida in due schemi diversi come si sta facendo, vedere denormalizzato . Quindi puoi utilizzare la Popolazione funzione per ottenere tutti i dati delle persone.

2 - Per riferimenti manuali: La seconda soluzione è effettuare una seconda chiamata al database ottenendo i dati personProfile utilizzando l'id utente come filtro.

Esempio 1:

In questo modo puoi ottenere i dati di tutte le persone senza una seconda chiamata al database.

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
}

Nota che sto utilizzando il tipo Schema.Types.ObjectId e non il Numero . In questo modo, puoi assegnare un nuovo valore a _creator passando il _id o l'oggetto persona e la mangusta convertirà l'oggetto nel suo _id. Ad esempio, puoi pubblicare qualcosa come

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

... e la mangusta si convertirà in

{
    _creator : 123123123123,
    title    : 'Mr'
}

Esempio 2:

In questo modo i tuoi dati sono ancora normalizzati e puoi ottenere tutti i dati delle persone con una seconda chiamata.

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
}