javascript - node - mongoose tutorial deutsch



Gibt bestimmte Felder mit.populate() aus Mongoose zurück (4)

Ich erhalte einen JSON-Wert von MongoDB, nachdem ich meine Abfrage ausgeführt habe. Das Problem ist, dass ich nicht alle JSONs zurückgeben möchte, die mit meiner Rückkehr verbunden sind. Ich habe versucht, die Dokumente zu durchsuchen, und habe keinen geeigneten Weg gefunden, dies zu tun. Ich habe mich gefragt, was, wenn es möglich ist, und wenn ja, was ist der richtige Weg, dies zu tun. Beispiel: In der DB

{
    user: "RMS",
    OS: "GNU/HURD",
    bearded: "yes",
    philosophy: {
        software: "FOSS",
        cryptology: "Necessary"
    },
    email: {
        responds: "Yes",
        address: "[email protected]"
    },
    facebook: {}
}

{
    user: "zuckerburg",
    os: "OSX",
    bearded: "no",
    philosophy: {
        software: "OSS",
        cryptology: "Optional"
    },
    email: {},
    facebook: {
        responds: "Sometimes",
        address: "https://www.facebook.com/zuck?fref=ts"
    }
} 

Was wäre der richtige Weg, um ein Feld zurückzugeben, wenn es für einen Benutzer existiert, aber wenn es kein anderes Feld zurückgibt. Für das obige Beispiel würde ich das Feld [email][address] für RMS und das [facebook][address] Feld für Zuckerburg zurückgeben. Dies ist, was ich versucht habe zu finden, wenn ein Feld null ist, aber es scheint nicht zu funktionieren.

 .populate('user' , `email.address`)
  .exec(function (err, subscription){ 
    var key;
    var f;
    for(key in subscription){
      if(subscription[key].facebook != null  ){
          console.log("user has fb");
      }
    }
  }

Answer #1

Ich weiß nicht genau, was Sie mit "Feld zurückgeben" meinen, aber Sie können eine lean() -Abfrage verwenden, um die Ausgabe frei zu ändern, dann beide Felder zu füllen und das Ergebnis nachbearbeiten, um nur das Feld zu behalten Sie wollen:

.lean().populate('user', 'email.address facebook.address')
  .exec(function (err, subscription){ 
    if (subscription.user.email.address) {
        delete subscription.user.facebook;
    } else {
        delete subscription.user.email;
    }
  });

Answer #2

Versuchen Sie Folgendes:

User.find(options, '_id user email facebook').populate('facebook', '_id pos').exec(function (err, users) {

Answer #3

Was Sie jetzt tun können, ist:

  .populate('friends', { username: 1, age: 1})

Answer #4

Wenn Sie nur einige bestimmte Felder für die ausgefüllten Dokumente zurückgeben möchten, können Sie dies erreichen, indem Sie die Feldnamensyntax als zweites Argument an die Populate-Methode übergeben.

Model
.findOne({ _id: 'bogus' })
.populate('the_field_to_populate', 'name') // only return the Persons name
...

Siehe Feldauswahl für Mongoose-Population





mongoose