我正在从事这个项目,并且我的用户获得了积极的评价。但我想将其他用户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,并且如果发现它返回一条带有消息的页面(我会处理),并且找不到它添加到阵列中。 如果您能帮助我,我非常感谢,希望我能解释清楚。
答案 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)
}
}