Node.js 猫鼬多对多关系

Node.js 猫鼬多对多关系,node.js,mongoose,nosql,Node.js,Mongoose,Nosql,我对Node.js和Mongoose完全陌生,我遇到了 事件和用户以及用户可以参加任何事件和事件的关系可以有许多参与用户 每当用户想要参加某个活动时,我都可以将事件id添加到用户的事件数组中,同时将用户添加到活动的用户数组中,但我认为我希望避免这种方法,因为我会将相同的信息存储两次 另一方面,我只能将用户存储到事件的用户数组中,并使用虚拟映射来检索所有用户的事件,但我发现这种方法非常耗时。在我看来,我必须经历每一个事件,然后通过它的所有参与用户,以了解用户是否真的参与。无论如何,如果有一种方法可

我对Node.js和Mongoose完全陌生,我遇到了

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

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

另一方面,我只能将用户存储到事件的用户数组中,并使用虚拟映射来检索所有用户的事件,但我发现这种方法非常耗时。在我看来,我必须经历每一个事件,然后通过它的所有参与用户,以了解用户是否真的参与。无论如何,如果有一种方法可以使用虚拟函数实现这一点,我不知道如何将
localField:userId
映射到事件的
foreignField:participants
数组

解决这个问题的正确方法是什么

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

是的,我知道这一点,所以最好的方法是向用户添加事件,反之亦然?据我所知,这是mongo实现关系的方式。我将被你纠正