ノード内のオブジェクトを検査/繰り返す方法は?
-
09-12-2019 - |
質問
Mongooseクエリから結果(オブジェクト)を取得し、オブジェクトを文字列化してクライアントに送信する前に、キーを置き換えたり削除したりします。
オブジェクトを登録するときは、すべてがいい(すべてのキーがリストされています)。私がオブジェクトの中で。彼らは意味があります - 彼らはMongooseに属しています - しかし、私はそれらを望みません。オブジェクトのObject.KeysまたはObject.getownPropertynamesを使用するときに同じことが発生します - 非表示フィールドポップアップ、なしでは便利です。
では、util.inspect(obj、true、null、true)を使用して要素を検査し、結果をコンソールに記録します。コンソールの結果は同じであるかのように、検査なしでオブジェクトを直接ログインしました。
今、2つの質問
- オブジェクトの内部/隠し情報を実際に取得するには、オブジェクトを正しく調べますか?
- オブジェクトを繰り返し、フィールドを取得するだけですか? (はい、私はfor.inループ内でhasownPropertyチェックをしています)
//編集
OK、私はそれを手に入れました。いくつかの調査後、Mongooseオブジェクトがそのプロパティをプロキシし、TOJSON機能を持っていたことに気付きました。解決策は、Mongoose自身のToObjectメソッドを使用することです。
.mongooseObj.toObject({ getters: true, virtuals: false })
このように、私はObject.getownPropertyNamesを繰り返すことができ、キーを置き換えてください。
解決
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));
});
他のヒント
Also if you want to access a certain field from a Document you can take a look at:
// path
doc.get('age') // 47
// dynamic casting to a string
doc.get('age', String) // "47"