Domanda

Sto ottenendo un risultato (l'oggetto) indietro da una query di mangusta e vuoi sostituire / rimuovere alcuni tasti, prima di stringere l'oggetto e inviarlo al client.

Quando I console.log L'oggetto, tutto è bello (tutte le chiavi sono elencate, niente di più). Quando faccio un per..in sull'oggetto, i campi nascosti popup dal nulla (e dalle chiavi di interesse, non lo fanno). Fanno un senso - appartengono alla mangusta - ma non li voglio. La stessa cosa accade, quando si utilizza Object.Keys o Object.GetOwnPropertyNames sull'oggetto - popup dei campi nascosti, nessuno utile.

Così volevo ispezionare l'elemento con util.inspect (obj, true, null, true) e registrare il risultato in console. Il risultato sulla console è lo stesso, come se avessi console.loged l'oggetto direttamente senza l'ispezione.

Ora, due domande;

    .
  1. Come posso ispezionare correttamente un oggetto, in modo da ottenere effettivamente informazioni interne / nascoste sull'oggetto?
  2. Come posso isolare sull'oggetto e ottenere solo i campi? (Sì, sto facendo l'holownproperty check all'interno del ciclo per..in)

    // Modifica

    OK, ho capito. Dopo alcune indagini, mi sono reso conto che l'oggetto mongoose proxy le sue proprietà e ha una funzione Tjson, che spiega perché la console.logs erano nella struttura di uscita prevista. La soluzione è utilizzare il metodo ToObject TOObject Mongoose;

    mongooseObj.toObject({ getters: true, virtuals: false })
    
    .

    In questo modo, posso isolare su Object.GetownPropertyNames e sostituire / rimuovere i tasti non voglio che il cliente sappia!

È stato utile?

Soluzione

I'm going to guess that you're looking at the Document object returned by a mongoose query when you really just want to see the data. If my guess is correct, you'll probably want something like this:

Model.findOne({ name: 'john' }, function (err, doc) {
    var data = doc.toObject();

    // do whatever you need to with data
    delete data.age;
    delete data.weight;
    data.isAwesome = true;

    // now stringify the data and do something with it
    callback(JSON.stringify(data));
});

Altri suggerimenti

Also if you want to access a certain field from a Document you can take a look at:

Document#get

// path
doc.get('age') // 47

// dynamic casting to a string
doc.get('age', String) // "47"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top