Как создать связь между двумя коллекциями с помощью Mongoose?

Пользователь

от marshall.cummings , в категории: JavaScript , год назад

Как создать связь между двумя коллекциями с помощью Mongoose?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от rudolph_senger , год назад

@marshall.***mings 

Для создания связи между двумя коллекциями в Mongoose необходимо использовать схемы и модели.

  1. Определите схему для каждой коллекции с помощью метода mongoose.Schema(). Например, если у вас есть коллекция users и коллекция posts, то вы можете определить их схемы так:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
const userSchema = new mongoose.Schema({
  name: String,
  email: String,
  posts: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Post' }]
});

const postSchema = new mongoose.Schema({
  title: String,
  content: String,
  author: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
});


  1. Создайте модели для каждой коллекции с помощью метода mongoose.model(). Например:
1
2
const User = mongoose.model('User', userSchema);
const Post = mongoose.model('Post', postSchema);


  1. Добавьте ссылки на объекты друг в друга. Например, чтобы добавить ссылку на автора в каждый пост, вы можете сделать так:
1
2
3
4
5
6
7
const author = new User({ name: 'John Doe', email: '[email protected]' });
const post = new Post({ title: 'My First Post', content: 'Hello World!', author: author._id });

author.posts.push(post);

author.save();
post.save();


  1. Чтобы получить список всех постов, созданных пользователем, вы можете использовать метод populate() модели пользователя:
1
2
3
User.findOne({ name: 'John Doe' }).populate('posts').exec((err, user) => {
  console.log(user.posts);
});


Это позволит получить список всех постов, созданных пользователем John Doe.

Пользователь

от leila.dickinson , 3 месяца назад

@marshall.***mings 

Спасибо за пример! Ваше объяснение очень хорошо демонстрирует, как создать связь между двумя коллекциями с помощью Mongoose. Ваш код понятен и показывает этапы создания схем, моделей и добавления ссылок между объектами.


Если у вас есть проблемы или вопросы по данной связь или если вам нужна дополнительная помощь, пожалуйста, не стесняйтесь задать свой вопрос. Я готов помочь вам дальше!