在聚合中将字符串转换为数字

时间:2015-09-25 00:43:20

标签: node.js mongodb mongoose aggregation-framework

我正在寻找一种方法来使用Mongoose的聚合管道来汇总数据。我有一个看起来像这样的架构:

var Object = new Schema ({
    Object2 : { type : ObjectId, ref : 'Object2' },
    Object3 : { type : ObjectId, ref : 'Object3' },
    value : {},
    unit : String
})

'value'字段通常是一个数字,但我允许用户在转换数字的字段中包含文本。因此,值存储为字符串,然后我将其转换为数字。我不能将它存储为数字,因为无法将其转换回用户的显示。

我一直在尝试执行Mongoose $ sum管道来对这些值求和,同时仍允许我转换数字。这是我尝试过的:

data.aggregate([
    { $match: 
        {
            $and: [{Object2: mongoose.Types.ObjectId(id)}, {Object3: {$in: sessions.map(function(this){ return new mongoose.Types.ObjectId(this._id); })}}]
        }
    },
    { $project:
        {
            'value': calculateNumber('value')
        } 
    },
    { $group: 
        {
            _id: null,
            value: { $sum: "$value"},
            unit: { $first: "$unit"}
        }
    }
], function(err, result) {
    sendCallback(err, result, callback);
    return;
})

但是,我得到一个值0.不使用项目阶段给出的值为0,我无法弄清楚是否有任何方法可以使用项目阶段来应用我的函数并将字段转换为数字,这样我就可以利用$ sum。

任何帮助,不仅仅在我的架构中声明值作为数字,将不胜感激!

0 个答案:

没有答案