mongoose .die find () - Methode zurückgegebene Objekt mit unerwünschten Eigenschaften

so, ich arbeite mit dem Mungo, der für einige Zeit und ich fand einige wirklich seltsame Dinge. Es wäre toll, wenn jemand könnte mich aufklären.

Die Sache ist, wenn mit dem .die find () - Methode des Mungos, das Objekt, bekomme ich als Antwort ist voll von Eigenschaften, die ich nicht wissen, Woher Es kam (ich vermute, Sie sind built-in Eigenschaften, aber egal) und ich möchte iterieren nur über die Eigenschaften ich .wählen Sie(). Got it? Nein? ok... zu erklären, besser:

Habe ich mein schema und Modell erklärt:

var mySchema = mongoose.Schema({
  name: String,
  prop1: String,
  prop2: String,
  prop3: String
})
var myModel = DB.model('myDataBase', mySchema)

Dann möchte ich finden ein Dokument mit den Namen, sagen wir, John und abrufen können alle, aber die 'name' - Feld, so gehe ich:

myModel.find({name: 'John'}, '-name', function(err, results){
  log(results[0])
}

und log(results[0]) Protokolle

{ prop1: 'one',
  prop2: 'two',
  prop3: 'three' }

So weit, So gut. Aber das Problem ist, jetzt will ich Durchlaufen diese Eigenschaften und überprüfen Sie eins nach dem anderen, und ich weiß nicht für sicher, wie viele 'Requisiten' wird jedes Ergebnis haben, so wollte ich etwas wie:

for(var key in results[0]){
  log(key)
}

So, ich hoffe, es wird log 'prop1', 'prop2' und 'prop3', aber Nein! Ok, ich bekomme Requisiten 1, 2 und 3, aber auch ich bekomme eine Menge anderer Eigenschaften und Funktionen wie: isNew, Fehler, _maxListeners, _doc, etc. Nicht nur diese extras, Eigenschaften, bekomme ich auch die 'name' - Eigenschaft, die ich von der Auswahl ausgeschlossen (und es war ausgeschlossen, wie gezeigt, in der ersten Anmeldung). Komisch, nicht wahr?

Aber warten Sie! Es gibt noch mehr! Ich habe online recherchiert und fand einige Menschen, die sagen: "Dude, bei der Iteration über Objekt-Eigenschaften verwenden Sie die hasOwnProperty-Methode!". So da ich ging:

for (var key in results[0]){
  if (results[0].hasOwnProperty(key)) log(key)
}

Protokoll Ergebnis ist ein paar von Eigenschaften (spezifisch: $__, isNew, Fehler, _maxListeners, _doc, _pres, _posts, speichern, _events) und nicht enthalten keine der Requisiten, die ich wollte in den ersten Platz.

Meine Frage ist, wie kann ich Durchlaufen nur prop 1, 2 und 3, ohne diese, ich weiß nicht, built-in-Eigenschaften und die, die ich explizit ausgeschlossen in den Parametern? (ps: ich dachte an eine Lösung, die nicht beinhalten, die zum konvertieren mein Objekt in ein array, wenn das ist möglich)

Auch, keine Frage per se, sondern aus Neugier, Woher diese Eigenschaften kommen? Warum erscheinen Sie in der for-Schleife und nicht, wenn ich log das Objekt? Warum die Eigenschaft, die ich ausgeschlossen ('name') erscheint auch in der for-Schleife? Was zur Hölle ist hasOwnProperty, wenn es nicht erkennt die Eigenschaften, die wurden nur protokolliert?

Vielen Dank für Ihre Zeit und Hilfe!
Bye!

  • .toObject() würde Ihnen ein schlichtes Objekt, vielleicht würde helfen? Die zusätzlichen Eigenschaften sind, weil das, was Sie zu tun haben ist eine Instanz eines Modells, die nicht einem einfachen Objekt.
  • danke @Kevin B ! Habe noch eine Menge Fragen, aber dass in der Tat, ist mein problem gelöst! Posten Sie Ihren Kommentar als eine Antwort, so kann ich mark es richtig? BR!
InformationsquelleAutor Thiago Loddi | 2015-02-10
Schreibe einen Kommentar