sql >> Database >  >> NoSQL >> MongoDB

hoe de functie zoals left join van mysql in mangoest te implementeren?

Wat je probeert te doen is niet mogelijk omdat er geen join-statement is op mongodb.

U kunt dit op twee manieren bereiken:

1 - Door DBrefs: Verander je schema in een schema dat alle gebruikersinformatie bevat en splits ze niet in twee verschillende schema's zoals je doet, zie gedenormaliseerd . Dan kun je de Bevolking gebruiken functie om alle persoonsgegevens te krijgen.

2 - Door handmatige verwijzingen: De tweede oplossing is om een ​​tweede aanroep te doen naar de database om de personProfile-gegevens te krijgen met behulp van de gebruikers-ID als filter.

Voorbeeld 1:

Op deze manier kunt u alle persoonsgegevens krijgen zonder een tweede oproep naar de 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
}

Merk op dat ik het type Schema.Types.ObjectId . gebruik en niet het nummer . Op deze manier kunt u een nieuwe waarde toewijzen aan _creator het doorgeven van de _id of het persoonobject en de mangoest converteert het object naar zijn _id. U kunt bijvoorbeeld iets posten als

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

... en de mangoest wordt omgezet in

{
    _creator : 123123123123,
    title    : 'Mr'
}

Voorbeeld 2:

Op deze manier zijn je gegevens nog steeds genormaliseerd en kun je alle persoonsgegevens krijgen met een tweede oproep.

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. MongoDB $log

  2. MongoDB $stdDevSamp

  3. Hoe een array van objecten op te slaan in Mongoose DB met slechts één aanroep?

  4. Alle veldnamen in een mongodb-verzameling krijgen?