我如何从数组中获得一个值并对其进行更新

时间:2019-05-20 13:46:01

标签: javascript node.js mongoose

我正在从事这个项目,并且我的用户获得了积极的评价。但我想将其他用户ID存储在命中该“正排名按钮”的数组中。我正在使用Mongoose和NodeJ。

我创建了一个包含数组的用户架构,并在数据库中搜索了该用户,我找到了该用户,但是我被困在这里,我不知道是否必须使用“ for”来实现所有数组值,或者如何检查用户是否已经对他进行“正面排名”。

这是我的postPositiveRank函数

exports.postPositiveRank = (req,res,next) =>{
const targetUser = req.body.targetUserId;
const loggedInUser = req.session.user._id;

User.findOne({"_id": targetUser}, function(err, process) {
    for( let i = 0; i< process.positiveRanked.length;i++)
    {
        if(loggedInUser.equals(process.positiveRanked[i]))
        {
            //
        }
        else {
            process.positiveRanked.push(loggedInUser);
            process.positiveRanked.save();
        }
    }
})
}

我的用户架构

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema =  new Schema({
firstname: {
    type: String,
    required: true
},
lastname: {
    type: String,
    required:true
},
age: {
    type: Number,
    required:true
},
occupation: {
    type: String,
    required:true
},
city: {
    type: String,
    required: true
},
county: {
    type: String,
    required:true
},
country: {
    type:String,
    required: true,
},
email: {
    type: String,
    required:true
},
password: {
    type: String,
    required:true
},
imageUrl: {
    type: String,
    required:true
},
rate:{
    type:Number,
    required:true
},
positiveRanked: [],
negativeRanked: []

});



module.exports = mongoose.model('User', userSchema);

我希望即使在阵列中是positiveRanking或negativeRanking时也要在该阵列上搜索loginInUser,并且如果发现它返回一条带有消息的页面(我会处理),并且找不到它添加到阵列中。 如果您能帮助我,我非常感谢,希望我能解释清楚。

1 个答案:

答案 0 :(得分:0)

您的架构中有positiveRanked的错字,请进行更改。您可以在数组上使用findIndex方法来获取要搜索的用户的getIndex,如果发现该索引,它将返回该数组中用户的索引;如果没有,它将返回-1,因此可以避免使用for循环。我建议使用async / await,因为这是一种更好的方法,可让您的代码保持干净和健壮。如果它不起作用,请告诉我

exports.postPositiveRank = (req,res,next) =>{
const targetUser = req.body.targetUserId;
const loggedInUser = req.session.user._id;

User.findOne({"_id": targetUser}, function(err, process) {
     const index=process.postitiveRanked.findIndex(id=>id===loggedInUser)
     if(index!==-1)
     {
       // user found
     }
     else{
      process.positiveRanked.push(loggedInUser);
      process.save()
     }

})
}

使用异步/等待

exports.postPositiveRank = async (req,res,next) =>{
const targetUser = req.body.targetUserId;
const loggedInUser = req.session.user._id;
   try{
        let user = await User.findOne({"_id": targetUser})
        const index=user.postitiveRanked.findIndex(id=>id===loggedInUser)
        if(index!==-1)
          {
           // user found
          }
        else{
           user.positiveRanked.push(loggedInUser);
           await user.save()
         }
      }
   catch(error){
        console.log(error)
      }
}