Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MongoDb+;Mongoose |如何散列密码数组而不是单个密码_Node.js_Mongodb_Mongoose_Mongoose Schema_Bcrypt - Fatal编程技术网

Node.js MongoDb+;Mongoose |如何散列密码数组而不是单个密码

Node.js MongoDb+;Mongoose |如何散列密码数组而不是单个密码,node.js,mongodb,mongoose,mongoose-schema,bcrypt,Node.js,Mongodb,Mongoose,Mongoose Schema,Bcrypt,我有一个json数组,其中包含近300个用户的数据。我使用(Mongoose)Model.InsertMany()将用户数据数组保存到Mongodb。要散列单个用户密码,我使用本指南: 但我想同时散列所有用户的密码。本指南使用“save”函数进行散列,但由于我使用“InsertMany()”转储到Mongodb,因此如何通过使用InsertMany()实现散列?MongooseInsertMany()不会触发.save()钩子。因此,您应该首先散列所有密码,然后使用insertMany()函数

我有一个json数组,其中包含近300个用户的数据。我使用(Mongoose)Model.InsertMany()将用户数据数组保存到Mongodb。要散列单个用户密码,我使用本指南:


但我想同时散列所有用户的密码。本指南使用“save”函数进行散列,但由于我使用“InsertMany()”转储到Mongodb,因此如何通过使用InsertMany()实现散列?Mongoose
InsertMany()
不会触发
.save()
钩子。因此,您应该首先散列所有密码,然后使用
insertMany()
函数将它们插入数据库。

您必须在mongoose上创建
pre
钩子,在创建文档之前将调用该钩子,在
pre-hook
函数中,您可以使用
bcrypt
节点库生成哈希字符串。

您可以在用户模型中使用pre-save-hook

问题是InsertMany无法使用预保存挂钩

但是使用Model.create将调用模式上声明的任何钩子

所以您可以使用User.create()方法使其工作


确切地insertMany()不会触发.save()钩子。由于我是初学者,你能告诉我如何散列300个密码吗?有没有捷径,或者我必须一个接一个地走。因为我使用的是单个文档。save for iti我使用save()来保存单个条目(它也可以保存单个条目),但对于300个密码,我同时使用Insertmany()。如何一次散列300个密码?InsertMany()不会触发预保存钩子。我使用的是预钩子,它只处理一个条目,但密码数组如何。当我使用InsertMany()而不是save()InsertMany时,如何一次对它们进行散列!==拯救如果您想调用预保存挂钩,请使用create()或insertMany。您必须迭代数组并分配哈希密码,然后用户insertMany我是初学者,您可以为我编写一些代码吗?您可以查看
bcrypt
文档以创建哈希密码,然后从一个包含300个用户的数组中循环,为每个用户分配一个新的哈希密码并执行许多操作。请不要忘记将我的答案标记为答案,以表明您的问题已解决
const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');

const userSchema = new mongoose.Schema({
  email: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  }
});

userSchema.pre('save', async function(next) {
  this.password = await bcrypt.hash(this.password, 12);
  next();
});

const User = mongoose.model('User', userSchema);

module.exports = User;