mongo データベースの各ドキュメント/レコードに配列が格納されており、この配列の各要素のスコアを計算し、配列要素の別のフィールドでスコアを集計する必要があります。
私がやろうとしていることを英語で説明するのは難しいので、ここに私がやろうとしていることのpythonの例があります.
records = [
{"state": "a", "initvalue": 1, "data": [{"time": 1, "value": 2}, {"time": 2, "value": 4}]},
{"state": "a", "initvalue": 5, "data": [{"time": 1, "value": 7}, {"time": 2, "value": 9}]},
{"state": "b", "initvalue": 4, "data": [{"time": 1, "value": 2}, {"time": 2, "value": 1}]},
{"state": "b", "initvalue": 5, "data": [{"time": 1, "value": 3}, {"time": 2, "value": 2}]}
]
def sign(record):
return 1 if record["state"] == "a" else -1
def score(record):
return [{"time": element["time"], "score": sign(record) * (element["value"] - record["initvalue"])} for element in record["data"]]
scores = []
for record in records:
scores += score(record)
sums = {}
for score in scores:
if score["time"] not in sums:
sums[score["time"]] = 0
sums[score["time"]] += score["score"]
print '{:>4} {:>5}'.format('time', 'score')
for time, value in sums.iteritems():
print '{:>4} {:>5}'.format(time, value)
a
これにより、状態と状態でわずかに異なるスコア関数が計算され、b
各時間エントリのスコアが集計されます。
これが結果です
time score
1 7
2 13
レコードをPythonに取り込んで集計を再発明することなく、mongoでこれを行う方法を見つけようとしています。
助けてくれてありがとう!