首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自动计算字段

自动计算字段
EN

Stack Overflow用户
提问于 2012-05-08 01:31:31
回答 2查看 5.2K关注 0票数 4

下面是我的应用程序的架构。在"meta“下,我需要一个叫做”向上投票“和”向下投票“的字段,我想要一个表示总点数的字段(向上投票-向下投票)。至于现在,我在客户端计算,但我也希望能够按点排序(具有最多点的图像首先和降序)。

在Mongoose中有什么方法可以自动计算一个字段吗?如果有,它是如何实现的?

代码语言:javascript
运行
复制
var ImageSchema = new Schema({
    name : String,
    size : Number,
    title   : String,
    body : String,
    buf : Buffer,
    date: { type: Date, default: Date.now },
    comments : [CommentSchema],
    meta : {
        upvotes : Number,
        downvotes : Number,
        points : ? // <- upvotes - downvotes
        favs : Number,
        uniqueIPs : [String],
        tags : [String]
    }
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-08 02:02:42

我会将points字段设置为普通的数字字段,并在您递增upvotesdownvotes时适当地递增(或递减)它(此处使用常规JS shell语法显示,但该技术也适用于mongoose ):

代码语言:javascript
运行
复制
// when upvoting
db.image.update({/* criteria */}, {$inc: {upvotes: 1, points: 1}})

// when downvoting
db.image.update({/* criteria */}, {$inc: {downvotes: 1, points: -1}})

如果您有现有的数据,则需要从现有的对象生成points字段,但是一旦有了它,由于MongoDB更新的原子性质和$inc操作符,它将是同步的。

票数 4
EN

Stack Overflow用户

发布于 2012-05-09 21:49:21

您应该使用Mongoose middleware

代码语言:javascript
运行
复制
schema.pre('save', function (next) {
    // set points value based on positive and negatives 
})

这样,每次保存数据时,点数值都会刷新。缺点是,即使向下/向上投票没有改变,它也会被刷新。

警告:要格外小心如果多个应用程序使用同一个DB,您希望在所有地方都应用相同的逻辑。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10486419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档