sql >> Databasteknik >  >> NoSQL >> MongoDB

hur man implementerar funktionen som left join av mysql i mongoose

Det du försöker göra är inte möjligt eftersom det inte finns något join-uttalande på mongodb.

Du kan uppnå detta på två sätt:

1 - Av DBRefs: Ändra ditt schema till ett som inkluderar all användarinformation och inte dela upp dem i två olika scheman som du gör, se avnormaliserad . Då kan du använda Population funktion för att få alla personuppgifter.

2 - Med manuella referenser: Den andra lösningen är att göra ett andra anrop till databasen som hämtar personProfil-data med användar-id som ett filter.

Exempel 1:

På så sätt kan du få alla personers data utan ett andra anrop till 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
}

Observera att jag använder typen Schema.Types.ObjectId och inte numret . På så sätt kan du tilldela _creator ett nytt värde skicka antingen _id eller personobjektet och mungusten kommer att konvertera objektet till dess _id. Du kan till exempel lägga upp något som

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

... och mangusten kommer att konvertera till

{
    _creator : 123123123123,
    title    : 'Mr'
}

Exempel 2:

På så sätt normaliseras din data fortfarande och du kan få alla persondata med ett andra samtal.

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. Hur man får tag i pipeline-objektet i Scrapy spider

  2. Görs mongodb säkerhetskopior automatiskt?

  3. Ändra MongoDB datalagringskatalog

  4. MongoDB textsökning och beställ efter