私は一般的にCouchDBとドキュメント指向データベースに不慣れです。
私はCouchDBで遊んでいて、(perlを使用して)ドキュメントを作成し、FutonのMap/Reduce関数を使用してデータをクエリしてビューを作成することに慣れることができました。
私がまだ理解しようとしていることの1つは、FutonのMap/Reduceを使用してドキュメント間で重複する値を識別する方法です。
たとえば、次のドキュメントがある場合:
{
"_id": "123",
"name": "carl",
"timestamp": "2012-01-27T17:06:03Z"
}
{
"_id": "124",
"name": "carl",
"timestamp": "2012-01-27T17:07:03Z"
}
そして、重複した「name」値を持つドキュメントIDのリストを取得したかったのですが、これはFuton Map / Reduceで実行できることですか?
達成したいと思っていた結果は次のとおりです。
{
"name": "carl",
"dupes": [ "123", "124" ]
}
..また..
{
"carl": [ "123", "124" ]
}
..これは値であり、それらの重複する値を含む関連するドキュメントIDです。
Map / Reduceでいくつかの異なることを試しましたが、私が理解している限り、Map関数はドキュメントごとにデータを処理し、Reduce関数では特定のキー/値のみを操作できます。資料。
私はperlで必要なデータを取得し、そこで魔法を使って、必要な結果を得ることができることを知っていますが、CouchDBの利点/制限をよりよく理解するために、今のところCouchDBのみで作業しようとしています。
これを行うことを考えているもう1つの方法は、RDBMSテーブルのような単一のドキュメントを使用することです。
{
"_id": "names",
"rec1": {
"_id": "123",
"name": "carl",
"timestamp": "2012-01-27T17:06:03Z"
},
"rec2": {
"_id": "124",
"name": "carl",
"timestamp": "2012-01-27T17:07:03Z"
}
}
..これにより、Map/Reduce関数を当初考えていた方法で使用できるようになります。しかし、これが理想的かどうかはわかりません。
私の心はまだRDBMSの土地にとどまっていることを理解しているので、上記でやろうとしていることの多くは必要ないかもしれません。これに関する洞察をいただければ幸いです。
ありがとう!
編集:いくつかの例のJSON構文を修正しました。