По принцип е лоша идея да се вграждат релации „следване/последване“ в потребителски документи поради няколко причини:
(1) има ограничение за максимален размер на документа от 16 MB и е вероятно популярен потребител на добре абониран сайт да получи стотици хиляди последователи, което ще се доближи до максималния размер на документа,
(2) отношенията на последователи се променят често и така случаят, в който потребител придобива много последователи, се превръща в повтарящ се растеж на документа, ако вграждате последователи. Честото нарастване на документи значително ще попречи на производителността на MongoDB и затова трябва да се избягва (случайното нарастване на документи, особено когато документите са склонни да достигнат стабилен краен размер, е по-малко наказание за производителността).
Така че, да, най-добре е да разделите връзката следване/последване в отделна колекция от записи, всеки от които има две полета, напр. { _id :, oid :}, с индекси на _id (за „кой следвам? " заявка) и oid (за заявката "кой ме следва?"). Всяка индивидуална промяна на състоянието се моделира чрез добавяне или премахване на един документ, но ако показвате и неща като брой последователи, вероятно трябва да поддържате отделни броячи, които актуализирате след всяко вмъкване/изтриване на ръбове.
(Разбира се, това предполага, че вашите бизнес изисквания ви позволяват известна гъвкавост по отношение на подробностите за последователност:като цяло, ако вашият код за показване каже на потребител, че има 304 последователи и след това продължи да ги изброява, само най-неприятният потребител ще провери дали изброените последователи преброяване до 304. Ако бизнес изискванията налагат абсолютна последователност, или ще ви е необходима база данни, която изолира транзакциите вместо вас, или в противен случай ще трябва сами да направите преброяването като част от показването на всички потребителски самоличности.)