Après beaucoup de débogage, de bricolage et de tests, j'ai finalement compris cela. Il s'est avéré que mon problème n'était pas l'écriture en mongo, mais la relecture de mongo une fois qu'il avait été écrit.
La documentation de sitecore semble (comme d'habitude) manquer complètement une partie assez fondamentale du fonctionnement de ceci. Environ un tiers des tout au long de la documentation qu'il indique :
Ok, c'est très trompeur. Qu'est-ce que cet EnsureAttribute
semble faire est de charger les données de la facette dans la classe actuelle à partir de mongo. Si vous ne le faites pas pour chaque propriété dans votre facette, il ne définit pas la valeur de mongoDb ! C'était mon erreur, je n'avais pas "assuré" toutes les propriétés de la classe.
Donc, ce qui se passait, c'est que
- Je mets mes données dans la facette
- les données de facette persistent dans la session et je peux les voir, y accéder, les modifier, etc.
- Les données sont finalement vidées vers mongo (xDb si vous le devez)
- l'utilisateur revient, le système le reconnaît correctement (il n'est pas nécessaire d'identifier l'utilisateur , le
SC_ANALYTICS_GLOBAL_COOKIE
le fait pour vous) - Mais il ne charge pas les données (hors de mongo et de nouveau dans la session) à moins que vous ne les "garantissiez".
Ainsi, le EnsureAttribute
ne "déclare pas de type valeur" (c'est tout simplement faux à mon avis) il charge les données hors de mongodb et dans la Session
actuelle .