2017-11-04 23 views
-1

私はこれがsee thisであることを知っているが、直接データベースを修正する答えは、この場合パスワードがフロントエンドに送信されないようにユーザーオブジェクトからパスワードを削除したいが、は動作していない。userオブジェクト。mongodbからフェッチされたオブジェクトからキーを削除する方法は?

User.find({}).then(function(users) { 
    let counter = 1; 
    users.forEach(function(user) { 
     delete user.password; 
     console.log("after delete",user) // password key/value exist 

     userMap[counter] = user; 
     counter++; 
    }); 

    return userMap; 
}); 

私はマングースを使用しています

+1

これはうまくいきました。ユーザーに「パスワード」という名前のフィールドがあることを確認してください。 console.log出力も表示できますか? –

答えて

1

あなたはMongooseラッパーオブジェクトにdeleteキーワードを使用しようとしています。 deleteキーワードは、ネイティブのJavascriptオブジェクトで動作します。そのためには、Mongooseが提供する機能lean()を使用する必要があります。

はこれを試してみてください -

User.find({}).lean().then 

私は、検索クエリの後lean()機能を追加しました。これで、オブジェクトはdeleteキーワードを使って変更できます。

0

なぜパスワードをクエリ自体から除外しないのですか? findの2番目のパラメータは、結果からキーをインクルード/除外します。

User.find({}, { "password": 0 }).then(function(users) { 
    // The users should not contain the password key here 
}); 

これはMongoose v4.0.0から入手可能です。同様に、findの後にselect演算子を使用することもできます。

User.find({}).select({ "name": 1 }).then(function(users) { 
    // Do something 
}); 

このクエリでは、ユーザーの名前のみが選択されます。

関連する問題