3 votes

Mise à jour d'un document hautement imbriqué dans Couchbase

J'ai un document qui contient plusieurs niveaux de hiérarchie. Quelque chose comme ceci :

{
  "id": "520707438",
  "pageURIHash": "3988665684",
  "children": [],
  "parentId": null,
  "content": "Here is a parent comment"
}

Le tableau des enfants peut contenir d'autres commentaires d'enfants sous forme d'objets JSON, et chacun des enfants peut à son tour avoir d'autres enfants. Il s'agit donc d'une structure fortement imbriquée.

Supposons maintenant que je veuille ajouter un commentaire enfant à un commentaire avec ID comme 123456745 . Je suppose que je connais le commentaire du niveau racine (afin de pouvoir utiliser la fonction USE KEYS dans mon N1ql ). Comment extraire les children correspondant au commentaire avec cet identifiant particulier et y ajouter un nouveau commentaire ? Je pourrais utiliser l'API de sous-document, mais elle exige que je connaisse le chemin d'accès, et dans ce cas, je ne le connais pas.

J'ai fait quelques recherches et j'ai trouvé cette question :

"UPDATE default d use keys \"" + comment.getRootCommentId()
           + "\" SET (??? How do I get the existing array and append to it) FOR p WITHIN d.children WHEN p.id = \"" + comment.getId() + "\" END";

Merci beaucoup !

3voto

Johan Larson Points 1802

Cela devrait faire ce que vous voulez :

update default d use keys "foo"
SET p.children = ARRAY_APPEND(p.children, {
  "id": "20202020",
  "pageURIHash": "99999",
  "children": [],
  "parentId": null,
  "content": "New Stuff"
}) FOR p WITHIN d.children WHEN p.id = "520707440" END

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X