将数据推送到foreach mongodb中的数组

时间:2017-05-16 07:20:19

标签: mongodb pymongo

db.getCollection('collectionName').find({
'MaterialNumber':'2093668',
'OutputScore.Softening Point':{$exists:true}}).forEach(function(myDoc){
   var score  = $push:{(myDoc.OutputScore['Softening Point'].ActualValue - 75.0)/75.0 }
   print(scores)
});

我正在使用robomongo ......获得如下值:

0.02666666666666667
0.013333333333333334
0.02666666666666667
0.02666666666666667

我想在数组中推送它 这样我就能得到这个值的最小值和最大值

1 个答案:

答案 0 :(得分:0)

可以通过多种方式获得集合中的最低和最高分数。以下示例使用示例数据in this gist

在内存中使用Python

result = db.test.find({
    'MaterialNumber': '2093668',
    'OutputScore.Softening Point': {'$exists': True},
})

scores = [(doc['OutputScore']['Softening Point']['ActualValue'] - 75.0) / 75.0 for doc in result]

max_score = max(scores)
min_score = min(scores)

>>print(max_score, min_score)
3.0 -0.2

在MongoDB中使用聚合

pipeline = [
    {
        '$match': {
            'MaterialNumber': '2093668',
            'OutputScore.Softening Point': {'$exists': True},
        },
    },
    {
        '$group': {
            '_id': None,
            'Scores': {'$push': {'$divide': [{'$subtract': ['$OutputScore.Softening Point.ActualValue', 75.0]}, 75.0]}}
        }
    },
    {
        '$project': {
            'maxScore': {'$max': '$Scores'},
            'minScore': {'$min': '$Scores'},
        }
    }
]

result = db.test.aggregate(pipeline)

>> print(list(result))
[{'_id': None, 'maxScore': 3.0, 'minScore': -0.2}]