Zoeken…


Syntaxis

  1. Model.Query.populate (pad, [selecteren], [model], [wedstrijd], [opties]);

parameters

Param Details
pad String - De veldsleutel die moet worden ingevuld
kiezen Object, String - Veldselectie voor de populatiequery.
model- Model - exemplaar van het model waarnaar wordt verwezen
bij elkaar passen Object - Voorwaarden invullen
opties Object - Zoekopdrachtopties

Eenvoudig invullen

Mongoespopulatie wordt gebruikt om gegevens weer te geven voor documenten waarnaar wordt verwezen uit andere collecties.

Laten we zeggen dat we een Person waarnaar wordt verwezen documenten genaamd Address .

Persoon Model

var Person = mongoose.model('Person', {
    fname: String,
    mname: String,
    lname: String,
    address: {type: Schema.Types.ObjectId, ref: 'Address'}
});

Adresmodel

var Address = mongoose.model('Address', {
    houseNum: String,
    street: String,
    city: String,
    state: String,
    country: String
});

Bevolken Address binnen Person te gebruiken's ObjectId, met behulp van laten we zeggen findOne() , gebruikt u de populate() functie en voeg het veld sleutel address als de eerste parameter.

Person.findOne({_id: req.params.id})
    .populate('address') // <- use the populate() function
    .exec(function(err, person) {
        // do something.
        // variable `person` contains the final populated data
    });

Of

Person.findOne({_id: req.params.id}, function(err, person) {
    // do something
    // variable `person` contains the final populated data
})
.populate('address');

De bovenstaande vraag moet het onderstaande document opleveren.

Persoon Doc

{
    "_id":"123abc",
    "fname":"John",
    "mname":"Kennedy",
    "lname":"Doe",
    "address":"456def" // <- Address' Id
}

Adres Doc

{
    "_id":"456def",
    "houseNum":"2",
    "street":"Street 2",
    "city":"City of the dead",
    "state":"AB",
    "country:"PH"
}

Bevolkte Doc

 {
    "_id":"123abc",
    "fname":"John",
    "mname":"Kennedy",
    "lname":"Doe",
    "address":{
        "_id":"456def",
        "houseNum":"2",
        "street":"Street 2",
        "city":"City of the dead",
        "state":"AB",
        "country:"PH"
    }
}

Verwaarloos een paar velden

Stel dat u de velden houseNum en street niet wilt in het address van het uiteindelijke bevolkte document, gebruik de populate() als volgt,

Person.findOne({_id: req.params.id})
    .populate('address', '-houseNum -street')  // note the `-` symbol
    .exec(function(err, person) {
        // do something.
        // variable `person` contains the final populated data
    });

Of

Person.findOne({_id: req.params.id}, function(err, person) {
    // do something
    // variable `person` contains the final populated data
})
.populate('address', '-houseNum -street');  // note the `-` symbol

Dit levert het volgende definitieve bevolkte document op,

Bevolkte Doc

 {
    "_id":"123abc",
    "fname":"John",
    "mname":"Kennedy",
    "lname":"Doe",
    "address":{
        "_id":"456def",
        "city":"City of the dead",
        "state":"AB",
        "country:"PH"
    }
}

Vul slechts enkele velden in

Als u alleen de velden houseNum en street in het address in het uiteindelijke houseNum document wilt, gebruikt u de functie houseNum populate() als volgt in de bovenstaande twee methoden,

Person.findOne({_id: req.params.id})
    .populate('address', 'houseNum street')
    .exec(function(err, person) {
        // do something.
        // variable `person` contains the final populated data
    });

Of

Person.findOne({_id: req.params.id}, function(err, person) {
    // do something
    // variable `person` contains the final populated data
})
.populate('address', 'houseNum street');

Dit levert het volgende definitieve bevolkte document op,

Bevolkte Doc

 {
    "_id":"123abc",
    "fname":"John",
    "mname":"Kennedy",
    "lname":"Doe",
    "address":{
        "_id":"456def",
        "houseNum":"2",
        "street":"Street 2"
    }
}

Geneste bevolking

Laten we zeggen dat je een user , dat name , contactNo , address en friends .

var UserSchema = new mongoose.Schema({
    name : String,
    contactNo : Number,
    address : String,
    friends :[{
        type: mongoose.Schema.Types.ObjectId,
        ref : User
    }]
});

Als u een gebruiker, zijn vrienden en vrienden van vrienden wilt vinden , moet u de populatie op 2 niveaus doen, namelijk de geneste populatie .

Vrienden en vrienden van vrienden vinden:

User.find({_id : userID})
    .populate({ 
        path : 'friends',
        populate : { path : 'friends'}//to find friends of friends
    });

Alle parameters en options van populate kunnen ook worden gebruikt in geneste populaties om het gewenste resultaat te krijgen.

Op dezelfde manier kunt u meer levels populate volgens uw vereiste.

Het wordt niet aanbevolen om geneste populatie te doen voor meer dan 3 niveaus. Als u geneste populaties voor meer dan 3 niveaus moet uitvoeren, moet u mogelijk uw schema herstructureren.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow