[英]Unsuccessfully updating Mongoose subdocument
我目前有Item
文档的Mongoose模式,它有一个名为linkedItems的子文档。 两者定义如下:
const ItemSchema = new Schema({
description: { type: [String], required: true },
linkedItems: [linkedItemSchema],
});
const linkedItemSchema = new Schema({
_id: Schema.Types.ObjectId,
title: String,
score: Number,
currentNumberOfRatings: Number,
});
所有链接项都有一个score
属性,用于存储父Item
文档和每个linkedItem
之间关系的强度。 我有一个函数updateLinkedItemRating
,当传递新的评级时,父项ID和链接的项ID应该通过在新分数中取平均来更新链接项的分数( currentNumberOfRatings
是具有这样的评级的数量)远远被平均分为)。 根据我在Mongoose子文档中找到的文档, updateLinkedItemRating
的以下代码段应该更新此分数。 它正确地计算了新分数,但是DB没有正确更新,并且err
和result
回调都记录为null。 任何建议,将不胜感激。
Item.findOne({ _id: parentItemId }, function(err, item) {
// Calculate new average score, this all works fine
const linkedItem = item.linkedItems.id(linkedItemId);
const currentTotalNumberOfRatings = linkedItem.currentNumberOfRatings;
const currentScore = linkedItem.score;
const newAverageNumerator = parseInt(currentScore) * parseInt(currentTotalNumberOfRatings) + parseInt(rating);
const newAverageDenominator = parseInt(currentTotalNumberOfRatings) + 1;
const newAverageScore = newAverageNumerator * 1.0 / newAverageDenominator;
console.log(newAverageScore); // This logs the proper number
//This does not update the DB as expected
Item.findOneAndUpdate(
{ _id: item._id, 'linkedItems._id': linkedItemId },
{
$set: {
'linkedItems.$.score': newAverageScore,
'linkedItems.$.currentNumberOfRatings': currentTotalNumberOfRatings + 1,
},
},
function (err, result) {
console.log(err); // Logs null
console.log(result); // Logs null
}
);
});
您不应该需要findOneAndUpdate,因为您已经拥有了linkedItem
const linkedItem = item.linkedItems.id(linkedItemId);
所以你可以设置这些属性,然后使用.save()
linkedItem.score = newAverageScore;
linkedItem.currentNumberOfRatings = currentTotalNumberOfRatings;
item.save(function(err, result){
console.log(err);
console.log(result);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.