はい、これは可能です。方法は次のとおりです。
2 つのドキュメントがあります
{
"_id":"anyvalue",
"type": "track",
"title": "Bohemian Rhapsody"
}
{
"_id":"2",
"type": "artist",
"name": "Queen",
"tracks": ["anyvalue"]
}
あなたが間違っていたのは、トラックの値(配列内のアイテム)を引用符で囲んでいなかったことです。
2)これが機能するには、参照 ID が _id である必要があります。id フィールドを持つことはできますが、ドキュメントの識別には _id のみが使用されるため、違いは注目に値します。
必要な結果を得るには、このビューで十分です
function(doc) {
if (doc.type === 'artist') {
for (var i in doc.tracks) {
var id = doc.tracks[i];
emit(id, { _id: id });
}
}
}
あなたがしたいことは、すべてのアーティストの「トラック」の id フィールドを発行するために、for ループ内で発行関数を使用することです。
次に、include_docs=true パラメーターを使用して、couch db ビューにクエリを実行します。これが、アイリス カウチで作成したデータベースの最終結果です。
http://jphastings.iriscouch.com/music/_design/test/_view/nested?reduce=false&include_docs=true
{
"total_rows": 3,
"offset": 0,
"rows": [
{
"id": "0b86008d8490abf0b7e4f15f0c6a50a7",
"key": "0b86008d8490abf0b7e4f15f0c6a463b",
"value": {
"_id": "0b86008d8490abf0b7e4f15f0c6a463b"
},
"doc": {
"_id": "0b86008d8490abf0b7e4f15f0c6a463b",
"_rev": "3-7e4ba3bfedd29a07898125c09dd7262e",
"type": "track",
"title": "Boheniam Rhapsody"
}
},
{
"id": "0b86008d8490abf0b7e4f15f0c6a50a7",
"key": "0b86008d8490abf0b7e4f15f0c6a5ae2",
"value": {
"_id": "0b86008d8490abf0b7e4f15f0c6a5ae2"
},
"doc": {
"_id": "0b86008d8490abf0b7e4f15f0c6a5ae2",
"_rev": "2-b3989dd37ef4d8ed58516835900b549e",
"type": "track",
"title": "Another one bites the dust"
}
},
{
"id": "0b86008d8490abf0b7e4f15f0c6a695e",
"key": "0b86008d8490abf0b7e4f15f0c6a6353",
"value": {
"_id": "0b86008d8490abf0b7e4f15f0c6a6353"
},
"doc": {
"_id": "0b86008d8490abf0b7e4f15f0c6a6353",
"_rev": "2-0383f18c198b813943615d2bf59c212a",
"type": "track",
"title": "Stripper Vicar"
}
}
]
}
ジェイソンはこの投稿でそれを素晴らしく説明しています
CouchDB で 1 対多の「JOIN」を行う最良の方法
このリンクは、couch db のエンティティ関係にも役立ちます
http://wiki.apache.org/couchdb/EntityRelationship