自动计算字段

以下是我的申请计划。 在下面 "meta" 我有扇子叫 "upvotes" 和 "downvotes", 我需要一个总点的领域 /upvotes - downvotes/. 目前我在客户端计算它,但我也希望能够按积分排序 /最重要的是最多的图像和下降/.

有没有办法自动计算字段 Mongoose, 如果是这样,它是如何完成的?


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]
}
}/;
已邀请:

董宝中

赞同来自:

你必须使用
http://mongoosejs.com/docs/middleware.html
经过 Mongoose :


schema.pre/'save', function /next/ {
// set points value based on positive and negatives
}/


因此,每次保存数据时,都会更新分数值。 缺点是它将被更新,即使 down/upvotes 不会改变。

警告:如果多个应用程序使用相同,则特别小心 DB, 您希望在任何地方使用相同的逻辑。

帅驴

赞同来自:

我会制作这个领域
points

正常数值和增加 /或减少/ 这是适当的你如何增加
upvotes


downvotes

/使用常规语法在此显示 JS shell, 但这种方法将与之合作 mongoose/:


// 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

.

要回复问题请先登录注册