Node.js 如何在Mongodb中循环数据和验证

Node.js 如何在Mongodb中循环数据和验证,node.js,mongodb,Node.js,Mongodb,我有一个动态输入字段,用户可以一次添加多个类别。在后端发送的数据类似于 [“电子”、“玩具”、“游戏”] 现在我想检查数组的每个元素,如果它们已经存在于mongodb上。如果它存在,我想将其存储在errors对象中 errors={0:'找到重复数据} 我正在附加验证代码,该代码不起作用,请帮助 const Category=require('../../models/Category'); 常量字段检查=(请求、恢复、下一步)=>{ 常量数据=请求主体; 常量错误=[]; 对于(i=0;i{

我有一个动态输入字段,用户可以一次添加多个类别。在后端发送的数据类似于

[“电子”、“玩具”、“游戏”]

现在我想检查数组的每个元素,如果它们已经存在于mongodb上。如果它存在,我想将其存储在
errors
对象中

errors={0:'找到重复数据}

我正在附加验证代码,该代码不起作用,请帮助

const Category=require('../../models/Category');
常量字段检查=(请求、恢复、下一步)=>{
常量数据=请求主体;
常量错误=[];
对于(i=0;i{
如果(用户){
//#如果找到重新注册的用户ID,则继续
错误[i]=“发现重复条目”;
错误推送(错误[i]);
} 
}).catch(错误=>{
返回res.json(err);
}
)
}
console.log(错误);
};

module.exports=现场检查您试图在同步循环(
for
)内调用异步方法(
findOne
)。正如你所经历的,这就像油和水一样

一个简单的解决方法是使方法异步,并使用
await
关键字,例如:

const fieldCheck = async (req, res, next) => {
    const data = req.body;
    const errors = [];
    try {
        for( i = 0; i < data.length ; i++) {
            let user = await Category.findOne({ category_name : data[i]});
            if (user) {
                // # If a reqistered User ID is found ,then move ahead
                errors[i] = 'Duplicate Entry Found';
                errors.push(errors[i]);
            }
        }
        // I assume you wanted to respond to res.json here?
        console.log(errors);
    } catch (err) {
        return res.json(err);
    }
};

module.exports = fieldCheck;
const fieldCheck=async(请求、恢复、下一步)=>{
常量数据=请求主体;
常量错误=[];
试一试{
对于(i=0;i
您试图在同步循环(
for
)内调用异步方法(
findOne
)。正如你所经历的,这就像油和水一样

一个简单的解决方法是使方法异步,并使用
await
关键字,例如:

const fieldCheck = async (req, res, next) => {
    const data = req.body;
    const errors = [];
    try {
        for( i = 0; i < data.length ; i++) {
            let user = await Category.findOne({ category_name : data[i]});
            if (user) {
                // # If a reqistered User ID is found ,then move ahead
                errors[i] = 'Duplicate Entry Found';
                errors.push(errors[i]);
            }
        }
        // I assume you wanted to respond to res.json here?
        console.log(errors);
    } catch (err) {
        return res.json(err);
    }
};

module.exports = fieldCheck;
const fieldCheck=async(请求、恢复、下一步)=>{
常量数据=请求主体;
常量错误=[];
试一试{
对于(i=0;i
好答案+1。我只是想指出另一种方法,它不需要使用
Category.findOne(…)
在循环中多次调用服务器,它只需一次调用就使用
$in
操作符,并将结果映射到错误数组,即
让用户=等待Category.find({'Category_name':{'in':req.body}).exec();errors=users.map(u=>`找到重复条目-${u.name}`)
正确答案+1。我只是想指出另一种方法,它不需要使用
Category.findOne(…)
在循环中多次调用服务器,它只需一次调用就使用
$in
操作符,并将结果映射到错误数组,即
让用户=等待Category.find({'Category_name':{'in':req.body}).exec();errors=users.map(u=>`Duplicate entry found-${u.name}`)