couchdbビューから個別の値をフィルタリングするためのヘルプを使用できます。コンピューターに関する情報を含むログを格納するデータベースがあります。コンピューターの新しいログが定期的にデータベースに書き込まれます。
少し単純化して、次のようなエントリを保存します。
{
"name": "NAS",
"os": "Linux",
"timestamp": "2011-03-03T16:26:39Z",
}
{
"name": "Server1",
"os": "Windows",
"timestamp": "2011-02-03T19:31:31Z",
}
{
"name": "NAS",
"os": "Linux",
"timestamp": "2011-02-03T18:21:29Z",
}
これまでのところ、このリストを個別のエントリでフィルタリングするのに苦労しています。受け取りたいのは、各デバイスの最新のログファイルです。
私はこのような見方をしています:
function(doc) {
emit([doc.timestamp,doc.name], doc);
}
このビューをPython(couchdbkit)でクエリすると、これまでに思いついた最良のソリューションは次のようになります。
def get_latest_logs(cls):
unique = []
for log in cls.view("logs/timestamp", descending=True):
if log.name not in unique_names:
unique.append(log)
return unique
わかりました...これは機能します。しかし、Pythonはログファイルのリスト全体を反復処理する必要があるため(かなり長くなる可能性があるため)、これは最善の解決策ではないという強い気持ちがあります。
削減機能が必要だと思いますが、問題に適応できる例や説明を実際に見つけることができませんでした。
したがって、私が探しているのは(純粋なcouchdb)ビューであり、特定のデバイスの最新のログのみを吐き出します。