2013-07-25 47 views
2

對於一個基本的例子,我有一個模式:貓鼬臨時計算字段

var testSchema = new Schema({ 
    op1 : Number, 
    op2  : Number 
}); 

那麼我想有這不是存儲在數據庫,但自動檢索後計算的「總」領域,可能可用於Mongoose的query.sort。

I.e.

total = op1 + op2 

然後用myTestModel.find({}).sort(total).execFind(...);

這可能嗎?

+2

虛擬域是易與貓鼬:http://stackoverflow.com/a/12982125/95190 – WiredPrairie

+0

但排序沒有:HTTP: //stackoverflow.com/a/13453207/95190。你需要自己做。 – WiredPrairie

+0

@WiredPrairie謝謝!這兩個參考是完美的。 – Manny

回答

3

MongoDB不允許您使用普通查詢來計算字段,但是,您可以使用聚合框架來執行此操作。你會是這樣做的:

myTestModel.aggregate(
    { $match: {} }, // your find query 
    { $project: { 
     op1: 1, // original fields 
     op2: 1, 
     total: { $add: ['$op1', '$op2' ] } // calculated field 
    } }, 
    { $sort: { total: 1 } }, 

    // And then the normal Mongoose stuff: 
    function (err, res) { 
    } 
); 

參見:http://mongoosejs.com/docs/api.html#model_Model.aggregate

+0

謝謝。你會知道,如果在通常的.sort javascript函數中使用這個性能優勢嗎? – Manny

+0

沒有抱歉,你必須在你自己的環境中進行基準測試。我期望它在C++數據庫中運行速度更快 - 而不是JavaScript。 – Derick