2012-03-08 8 views
5

私はオブジェクトを文字列化してクライアントに送信する前に、結果(オブジェクト)をmongooseクエリから返して、いくつかのキーを置き換えたり削除したりします。ノード内のオブジェクトを検査/反復する方法は?

私はconsole.logオブジェクトを、すべてがいいです(すべてのキーが表示され、それ以上はありません)。私がオブジェクトのfor..inを実行すると、隠されたフィールドがどこからもポップアップしません(そして関心のあるキーはありません)。彼らは意味があります - 彼らはマングースに属します - しかし私はそれらを望んでいません。 Object - hidden fieldsポップアップでObject.keysまたはObject.getOwnPropertyNamesを使用すると、同じことが起こります。

私は、util.inspect(obj、true、null、true)で要素を検査し、その結果をコンソールに記録したかったのです。コンソール上の結果は、検査なしで直接console.loggedした場合と同じです。

今、2つの質問があります。

  1. オブジェクトを正しく検査して、実際にそのオブジェクトに関する内部情報または隠れた情報を実際に取得するにはどうすればよいですか?
  2. オブジェクトを反復処理してフィールドを取得するにはどうすればよいですか? (はい、私はこのfor..inループ内でhasOwnPropertyをチェックをしています)

// EDIT

OK、私はそれを得ました。何らかの調査の後、私は、mongooseオブジェクトがそのプロパティをプロキシし、なぜconsole.logが期待される出力構造にあるのかを説明するtoJSON関数を持っていることに気付きました。解決方法は、Mongoose自身のtoObjectメソッドを使用することです。

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

このように、私は私が知っているようにクライアントを望んでいないキーを削除/ Object.getOwnPropertyNamesを反復処理し、置き換えることができます!

+0

少し質問を言い換えることができますか?私はあなたが何を求めているのか理解するのに苦労しています。 「隠されたフィールド」とはどういう意味ですか?プロトタイプチェーンを上回るプロパティだけですか?非列挙型としてマークされたプロパティまたは_underscoreで始まるプロパティ? –

答えて

4

私はあなたが本当にただのデータを見たいとき、マングースのクエリによって返さドキュメントオブジェクトを見ていることを推測するつもりです。

Document#get:あなたはドキュメントから特定のフィールドにアクセスしたい場合は、を見てみることができます。また

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)); 
}); 
+1

ご回答ありがとうございました。私は実際に今見て、あなたの答えにtoObjectを持っていることを..最初からそれを見たことがあります;)あなたの助けをありがとう! – japrescott

0

:私の推測が正しければ、おそらくこのような何かをしたいでしょう

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

// dynamic casting to a string 
doc.get('age', String) // "47" 
関連する問題