Certaines informations peuvent être laissées dans le même document, et dans la plupart des cas cela fonctionnera très bien.
{
"title": "Blog Article Title",
"content": "... blah blah blah ...",
"author": {
"name": "someguy",
"email": "[email protected]"
},
"type": "post"
}
D'autres fois, vous pouvez simplement utiliser le _id
d'un autre document afin de créer un lien entre les 2 documents.
{
"_id": "...",
"title": "Blog Article Title",
"content": "... blah blah blah ...",
"author": "someguy",
"type": "post"
}
{
"_id": "someguy",
"name": "Some Guy",
"email": "[email protected]",
"type": "author"
}
À première vue, vous aurez besoin de 2 requêtes distinctes pour récupérer les deux entités. Cependant, il existe une petite astuce que les requêtes de vue peuvent exposer.
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
}
}
Votre vue Affichera ce résultat: (notez comment la vue est triée)
{ ...
"rows": [
{
"key": ["Blog Article Title", 0],
"value": null
},
{
"key": ["Blog Article Title", 1],
"value": { "_id": "someguy" }
}
]
}
Ce n'est pas tout ce utile car il est, mais si vous ajoutez include_docs=true
à l'URL de votre vue, vous » Vous obtiendrez ce résultat:
{ ...
"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": "[email protected]",
"type": "author"
}
}
]
}
Maintenant, les deux entités sont incluses dans une requête. :)
Consultez la section this article pour plus d'informations sur les relations entre entités dans CouchDB.
Ok merci. Est-il logique ou non de stocker les données de l'auteur sur un document séparé et de le charger séparément? (stocker, dans le document post, seulement l'identifiant de l'auteur - dans le style SQL) – user232028