Некоторую информацию можно оставить в том же документе, и в большинстве случаев она будет работать нормально.
{
"title": "Blog Article Title",
"content": "... blah blah blah ...",
"author": {
"name": "someguy",
"email": "someguy@foo.bar"
},
"type": "post"
}
В других случаях вы можете просто использовать _id
другого документа для созданияссылка между двумя документами.
{
"_id": "...",
"title": "Blog Article Title",
"content": "... blah blah blah ...",
"author": "someguy",
"type": "post"
}
{
"_id": "someguy",
"name": "Some Guy",
"email": "someguy@foo.bar",
"type": "author"
}
На первый взгляд, вам потребуется 2 отдельных запроса для извлечения обеих сущностей.Тем не менее, есть хороший маленький трюк, который могут отображать запросы представления.
function (doc) {
if (doc.type === "post") {
emit([doc.title, 0], null); // output the main post
emit([doc.title, 1], { _id: doc.author }); // output the author
}
}
Ваше представление выведет этот результат: (обратите внимание, как представление сортируется)
{ ...
"rows": [
{
"key": ["Blog Article Title", 0],
"value": null
},
{
"key": ["Blog Article Title", 1],
"value": { "_id": "someguy" }
}
]
}
Это не всеэто очень полезно, но если вы добавите include_docs=true
к URL-адресу просмотра, вы получите такой результат:
{ ...
"rows": [
{
"key": ["Blog Article Title", 0],
"value": null,
"doc": {
"_id": "...",
"title": "Blog Article Title",
"content": "... blah blah blah ...",
"author": "someguy",
"type": "post"
},
},
{
"key": ["Blog Article Title", 1],
"value": { "_id": "someguy" },
"doc": {
"_id": "someguy",
"name": "Some Guy",
"email": "someguy@foo.bar",
"type": "author"
}
}
]
}
Теперь обе сущности включены в 1 запрос.:)
Проверьте эту статью для получения дополнительной информации об отношениях сущностей в CouchDB.