gpt4 book ai didi

javascript - Mongoose - 取 [Number] 的总和并将新属性添加到同一文档

转载 作者:行者123 更新时间:2023-11-30 08:33:33 27 4
gpt4 key购买 nike

我在 Mongo 数据库中有以下文档:

{
_id: 1,
question: "Blue or red?",
__v: 0,
votes: [9, 5]
}

我想在后端获得总票数 14(因为 9 + 5 = 14)并动态地在该文档上附加一个新属性。所以最后,它看起来像这样:

{
_id: 1,
question: "Blue or red?",
__v: 0,
votes: [9, 5],
totalVotes: 14
}

我研究了如何做到这一点,发现了类似这样的词:聚合、展开等。我认为这些对我没有帮助,因为 MongoDB 中的聚合是比较文档的属性,而我只想修改相对于自身属性的单一文档。

这是我的“尝试”:

var getTotal = function(arr){
var total = 0;
for(var i in arr) { total += arr[i]; }
return total;
};

Model.update({ $set: { totalVotes: getTotal(votes) }}, function(){
console.log('Updated.');
});

显然 votes 没有定义,这会导致错误。我如何告诉它从模型中获取选票,并将其传递到 getTotal() 函数中?

这是模型的架构,顺便说一句:

question: {type: String, required: true},
votes: [Number],
totalVotes: Number

最佳答案

假设您的 SchemaExampleSchema

var ExampleSchema = new Schema({
question: {type: String, required: true},
votes: [Number]
}, {
toObject: {
virtuals: true
},
toJSON: {
virtuals: true
}
});

这将在查询 mongoDB 中的文档时允许 virtuals

现在在声明模式后实现虚拟简单。

ExampleSchema
.virtual('totalVotes')
.get(function () {
return this.votes.reduce(function(currentValue, previousValue){
return (currentValue + previousValue);
});
});

关于javascript - Mongoose - 取 [Number] 的总和并将新属性添加到同一文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34470352/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com