我试图弄清楚如何通过每次访问该页面时增加+1来更新该字段,如果从未访问过该页面,则将其添加到数据库中。
目前,这是我所拥有的,但似乎并不能做很多事情。我一定在某个地方出错了,我还没有实现那一部分,如果从未浏览过该页面,那么在存储在数据库中的数组中创建一个新对象。
小注释:在我创建地图的地方,如果我查看与数据库中存储的ID相同但没有增量的页面,它们确实具有相同的ID。
exports.pageVisitCount = (req, res, next) => {
User.findById({
_id: req.userData.userId
}, 'visits', function (err, pageVists) {
if (err) {
res.status(401).json({
message: "Error Occured!"
})
} else {
const pageCounts = pageVists.visits;
pageCounts.map(page => {
const postViewed = req.body.postId;
if (page.postId.toString() === postViewed) {
User.findByIdAndUpdate({
_id: req.userData.userId
}, {
$set: {
visits: [{
"postId": postViewed,
$inc: { visitCount: 1 }
}]
}
}, {
upsert: false
},
(err) => {
if (err) {
res.status(401).json({
message: "Error Occured!"
})
} else {
res.status(200).json({
message: "Update successful!"
})
}
});
}
});
}
});
}
这是我正在使用的架构:
const visitsSchema = new Schema ({
postId: {
type: String
},
visitCount: {
type: Number
}
})
const userSchema = mongoose.Schema({
email: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
},
role: {
type: String,
required: true
},
answers: {
type: String
},
visits: [visitsSchema]
});
任何反馈将不胜感激,我想提及一下我是后端新手,谢谢!
答案 0 :(得分:1)
为避免在查询正在考虑的用户visits
之后使用地图过滤visits
,建议您让mongodb为您完成此操作。在这种情况下,您首先要根据用户ID和postId进行查找。如果您获得的记录符合这两个条件,那么您可以确定,可以通过将特定的visits
visitCount
加1来轻松地更新用户访问。
否则,如果它们与任何记录都不匹配,则由于您可能使用了有效的用户ID,则该用户尚未访问过该帖子。因此,您现在使用postId创建一个新访问并将其visitCount初始化为1(尽管我们打算创建,但是由于它是一个子文档,因此您需要使用$push
)。足够多的谈话尝试下面的代码。
exports.pageVisitCount = (req, res, next) => {
User.findOne({
_id: req.userData.userId, "visits.postId": req.body.postId
}, 'visits.$', function (err, user) {
if (err) {
res.status(401).json({
message: "Error Occured!"
});
} else {
if(user == null){
User.findByIdAndUpdate({
_id: req.userData.userId
}, {
$push: {
visits: {
"postId": req.body.postId,
visitCount: 1
}
}
}, function (err) {
if(err)
return res.status(401).json({
message: "Error Occured when creating new visit!"
})
return res.status(200).json({
message: "Success"
})
})
}
User.update({
_id: req.userData.userId, "visits.postId": req.body.postId
}, {
$inc: { "visits.$.visitCount": 1 }
},(err) => {
if (err) {
res.status(401).json({
message: "Error Occured!"
})
} else {
res.status(200).json({
message: "Update successful!"
})
}
});
}
});
};