【发布时间】:2019-04-18 23:51:00
【问题描述】:
我正在创建一种用户体验,用户将能够对来自不同供应商的商品进行评分。我最初的想法是让每个用户模式都有一个数组来存储用户评分的所有项目。评级项目将包括唯一的供应商项目 ID 和数字评级值。
用户模型
const userSchema = new mongoose.Schema({
...
userType: String,
ratedItems: Array,
...
});
控制器
exports.postUpdateRatedItem = (req, res, next) => {
User.findById(req.user.id, (err, user) => {
if (err) { return next(err); }
user.update(
{ $push: {ratedItems : {
vendorItem : req.body.itemID,
rating : req.body.rating
}}},
function (err) {
res.send(200);
});
});
}
电流输出
{
"_id" : ObjectId("5c91869a71ece20551fd6aed"),
"userType" : "participant",
"ratedItems" : [
{ "vendorItem" : "5c9bdd524a0dfa753e08a0a4", "rating" : "3" },
{ "vendorItem" : "5c9bdd524a0dfa753e08a0a4", "rating" : "6" }
]
}
这种方法在向数组中添加新对象时效果很好,但只添加而不更新。相反,每次用户更新评分时,都会将一个新对象添加到数组中。什么方法可以检查唯一的 vendorItem id?如何检查用户评分的项目?如果找到,更新评分值,如果没有找到,推送到数组。
提前谢谢你,还在学习 MongoDB/Mongoose。
编辑
以下是我预期的结果。对于数组中的每个对象,“评分”会在用户更改评分时更新。 ratedItems 数组最终会有很多 vendorItem 具有唯一的 ID 和评级。
预期输出
{
"_id" : ObjectId("5c91869a71ece20551fd6aed"),
"userType" : "participant",
"ratedItems" : [
{ "vendorItem" : "5c9bdd524a0dfa753e08a0a4", "rating" : "6" },
// additional rated items all with unique IDs
{ "vendorItem" : "5c9bcc14d5161c38a4581e28", "rating" : "2" },
{ "vendorItem" : "5c9407d143cd0f20d758acdb", "rating" : "11" }
]
}
【问题讨论】: