Это классические отношения родитель-ребенок, и ваша проблема в том, что вы сохраняете отношения в неправильной записи :-).Родитель никогда не должен содержать ссылку на детей.Вместо этого у каждого ребенка должна быть ссылка на родителя.Почему не наоборот?Это немного историческая особенность: это сделано так, потому что классическая реляционная таблица не может иметь несколько значений для одного поля, что означает, что вы не можете легко хранить несколько дочерних идентификаторов в реляционной таблице, тогда как каждый дочерний элемент будет толькокогда у кого-то есть один родитель, легко установить одно поле в дочернем элементе.Документ Mongo может иметь несколько значений в одном поле, используя массивы, но если у вас нет на то веских причин для этого, просто лучше следовать исторической парадигме.
Какэто применимо в вашей ситуации?То, что вы пытаетесь сделать, это хранить ссылки на все дочерние элементы (т.е. идентификаторы записей) в виде списка в родительском элементе (то есть массива в пользовательском документе).Это не обычный способ сделать это.Вместо этого в каждом дочернем элементе (т. Е. В каждом сообщении) есть поле с именем user_id и сохраняйте там userID.
Далее убедитесь, что вы создали индекс для поля user_id.
СВ этой настройке легко взять сообщение и выяснить, кем был пользователь (просто посмотрите на поле user_id).А если вы хотите найти все сообщения пользователя, просто выполните posts.find ({user_id: 'XXXX'}).Если у вас есть индекс для этого поля, поиск будет выполнен быстро.
Хранение родительских ссылок в дочернем элементе почти всегда лучше, чем хранение дочерних ссылок в родительском.Хотя Mongo достаточно гибок, чтобы позволить вам структурировать его в любом случае, это не является предпочтительным, если у вас нет для этого реальной причины.
РЕДАКТИРОВАТЬ Если у вас do есть веская причина для хранениядочерние ссылки в родительском элементе, затем предполагается, что структура выглядит следующим образом: user = {posts: [postID1, postID2, postID3, ...]} Вы можете найти пользователя для определенного сообщения по user.find ({posts: "XXXX"}).MongoDB достаточно умен, чтобы знать, что вы ищете пользователя, в котором массив записей содержит элемент «XXX».И если вы создаете индекс для поля сообщений, тогда запрос должен быть довольно быстрым.