我对Node.js和Mongoose完全陌生,因此遇到了这个问题
Event
和User
以及用户可以参加任何事件和事件的关系可以有许多参与用户。
每次用户想要参加活动时,我都可以将事件ID添加到用户的事件数组中,同时将用户添加到事件的用户数组中,但是我想避免这种方法,因为我会存储相同的信息两次。
另一方面,我只能将用户存储到事件的用户数组中,并使用虚拟映射来检索所有用户的事件,但是我发现这种方法非常耗时。在我看来,我将必须遍历每个活动,然后遍历所有参与活动的用户,以查明该用户是否确实在参与。无论如何,如果有一种使用虚函数实现此目的的方法,我不知道如何将localField: userId
映射到事件foreignField: participants
的数组。
解决此问题的正确方法是什么?
答案 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