След много отстраняване на грешки, бъркане и тестване най-накрая разбрах това. Оказа се, че проблемът ми не е писането в mongo, а в обратното четене от mongo, след като е било написано.
Документацията на ядрото на сайта изглежда (както обикновено) напълно пропуска доста фундаментална част от работата на това. Около една трета от надолу по документите, които посочва :
Добре, това е много подвеждащо. Какво представлява този EnsureAttribute
изглежда трябва да заредите данните за фасета в текущия клас от mongo. Ако не направите това за всеки имот във вашия аспект, тогава той не задава стойността от mongoDb! Това беше моя грешка, не бях „осигурил“ всяко свойство в класа.
Така че това, което се случваше е,
- Поставям данните си във фасета
- данните за фасетите продължават да съществуват в сесията и мога да ги видя, да получа достъп до тях, да ги променя и т.н.
- Данните в крайна сметка се изчистват в mongo (xDb, ако трябва)
- потребителят се връща, системата го разпознава правилно (няма нужда да идентифицирате потребителя ,
SC_ANALYTICS_GLOBAL_COOKIE
прави това вместо вас) - Но не зарежда данните (от mongo и обратно в сесията), освен ако не ги „осигурите“.
Така че EnsureAttribute
не "декларира тип стойност" (това е напълно погрешно според мен) зарежда данните от mongodb и в текущата Session
.