У меня вопрос с дизайном схемы. У меня есть UserSchema и PostSchema.MongoDB дизайн схемы Mongoose
var User = new Schema({
name: String
});
var Post = new Schema({
user: { type: Schema.Types.ObjectId }
});
Кроме того, пользователь может следить за другими пользователями. Сообщение может понравиться другим пользователям. Я хотел бы запросить последователей Пользователя и пользователя ниже, с функциями mongoose, такими как ограничение, пропуск, сортировка и т. Д. Я также хочу запросить сообщение, которое нравится пользователю.
В принципе, моя единственная попытка решить это - сохранить двойную ссылку в каждой схеме. Схемы становятся
var User = new Schema({
name: String,
followers: [{ type: Schema.Types.ObjectId, ref: "User" }],
following: [{ type: Schema.Types.ObjectId, ref: "User" }]
});
var Post = new Schema({
creator: { type: Schema.Types.ObjectId, ref: "User" },
userLikes: [{ type: Schema.Types.ObjectId, ref: "User" }]
});
так, код, который будет использоваться для запроса
// Find posts that I create
Post.find({creator: myId}, function(err, post) { ... });
// Find posts that I like
Post.find({userLikes: myId}, function(err, post) { ... });
// Find users that I follow
User.find({followers: myId}, function(err, user) { ... });
// Find users that follow me
User.find({following: myId}, function(err, user) { ... });
Есть ли способ, кроме делать двойную ссылку, как это кажется, что к ошибкам?
Да, я могу использовать заполнение. Однако представьте, что у меня много пользователей. Тогда, если я заполню это и отправлю их на передний план, будет много данных. Я больше думаю о том, как реализовать разбиение на страницы/бесконечную прокрутку. –
Вы должны были указать это в своем первоначальном вопросе. Вы не можете ожидать решения, которое соответствует вашим потребностям, если вы не укажете свои потребности. Тем не менее, нет причин, по которым вы не можете реализовать решение для разбивки на страницы/бесконечное прокручивание, используя ответ выше, как точку starti. Однако реализация такого решения выходит за рамки вашего вопроса. – JME
Хорошо, извините за это. Как реализовать разбиение на страницы с помощью вашего решения? Потому что по стандартным запросам я могу просто сделать ограничение и пропустить, но с заполнением, такой опции нет. –