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

hvordan man implementerer funktionen som venstre join af mysql i mongoose

Det, du forsøger at gøre, er ikke muligt, fordi der ikke er nogen join-erklæring på mongodb.

Du kan opnå dette på to måder:

1 - Af DBRefs: Ændring af dit skema til et, der inkluderer alle brugeroplysninger og ikke opdeler dem i to forskellige skemaer, som du gør, se denormaliseret . Så kan du bruge befolkningen funktion for at få alle persondata.

2 - Ved manuelle referencer: Den anden løsning er at foretage et andet kald til databasen og hente personProfile-data ved at bruge bruger-id'et som et filter.

Eksempel 1:

På denne måde kan du få alle personers data uden et andet opkald til databasen.

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
}

Bemærk, at jeg bruger typen Schema.Types.ObjectId og ikke Nummeret . På denne måde kan du tildele en ny værdi til _creator sende enten _id eller personobjektet og mongoose vil konvertere objektet til dets _id. For eksempel kan du poste noget som

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

... og mangusten vil konvertere til

{
    _creator : 123123123123,
    title    : 'Mr'
}

Eksempel 2:

På denne måde er dine data stadig normaliseret, og du kan få alle persondata med et andet opkald.

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. php mongodb find n'te post i samlingen

  2. Klasse 'MongoDB\Driver\Manager' blev ikke fundet

  3. Hvordan fjerner du dubletter baseret på en nøgle i Mongodb?

  4. Forstå relationer og fremmednøgler i Mongoose