猫鼬多对多关系

时间:2019-09-16 15:49:49

标签: node.js mongoose nosql

我对Node.js和Mongoose完全陌生,因此遇到了这个问题

EventUser以及用户可以参加任何事件和事件的关系可以有许多参与用户。

每次用户想要参加活动时,我都可以将事件ID添加到用户的事件数组中,同时将用户添加到事件的用户数组中,但是我想避免这种方法,因为我会存储相同的信息两次。

另一方面,我只能将用户存储到事件的用户数组中,并使用虚拟映射来检索所有用户的事件,但是我发现这种方法非常耗时。在我看来,我将必须遍历每个活动,然后遍历所有参与活动的用户,以查明该用户是否确实在参与。无论如何,如果有一种使用虚函数实现此目的的方法,我不知道如何将localField: userId映射到事件foreignField: participants的数组。

解决此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const eventSchema = Schema({
  name: String,
  user: [{ type: Schema.Types.ObjectId, ref: 'User' }]
});

const userSchema = Schema({
  name: String,
  event: [{ type: Schema.Types.ObjectId, ref: 'Event' }]
});

const Event = mongoose.model('Event', eventSchema);
const User = mongoose.model('User', userSchema);

使用可以在这里https://mongoosejs.com/docs/populate.html

中阅读更多内容