私はこのようなエントリのコレクションを持っています:
db.mesh_captors.save({'arduino': 0xCB, 'pin': 14, 'value': 35, 'date': datetime.utcnow()})
db.mesh_captors.save({'arduino': 0xCB, 'pin': 14, 'value': 63, 'date': datetime.utcnow()})
db.mesh_captors.save({'arduino': 0xCB, 'pin': 15, 'value': 126, 'date': datetime.utcnow()})
db.mesh_captors.save({'arduino': 0x7B, 'pin': 14, 'value': 121, 'date': datetime.utcnow()})
arduinoの各ピンの最後の値を取得したい。MySQLを使用すると、私はこれを書いたでしょう:
SELECT DISTINCT pin, value
FROM mesh_captors
WHERE arduino = 203
GROUP_BY pin
ORDER BY date DESC
しかし、MongoDBを使用しているので、その方法がよくわかりません。
私はこのようなことを試みましたが、それで十分ですか?
reducer = Code("""
function (doc, out) {
if(out.date == 0 || out.date < doc.date) {
out.date = doc.date;
out.value = doc.value;
}
}
""")
captors_value = db.mesh_captors.group(key=['pin'], condition={'arduino': int(arduino_id)}, reduce=reducer, initial={'date': 0})
今では、リクエストの実行に4.5秒以上かかり、エントリ数が増えるにつれて時間がかかります。