Лучший способ проверить владельца категории - PullRequest
0 голосов
/ 08 января 2020

Модель задачи

const TaskSchema = new Schema({
    userId: {
        type: Schema.Types.ObjectId,
        ref: 'User'
    },
    title: {
        type: Schema.Types.String,
        required: true
    },
    description: Schema.Types.String,
    createdDate: {
        type: Schema.Types.Date,
        default: Date.now()
    },
    position: {
        type: Schema.Types.Number,
        default: 0
    },
    categoryId: [{
        type: Schema.Types.ObjectId,
        ref: 'Category'
    }]
});

Модель категории

const CategorySchema = new Schema({
    title: {
        type: Schema.Types.String,
        required: true
    },
    description: {
        type: Schema.Types.String,
    },
    categoryThumbnail: {
        type: Schema.Types.String,
        default: ''
    },
    userId: {
        type: Schema.Types.ObjectId,
        ref: 'User',
        required: true
    },
    createdDate: {
        type: Schema.Types.Date,
        default: Date.now()
    }
});

При создании задачи пользователь может назначить категорию. Нужно ли проверять владельца категории перед добавлением задачи в Mongodb. Если так, каков наилучший способ сделать это? Варианты: 1. Сделать запрос в базу данных по всем категориям и проверить идентификатор пользователя. 2. Сохраните идентификатор категории в пользовательском документе и, после получения запроса, проверьте этот список.

1 Ответ

0 голосов
/ 08 января 2020

Таким образом, если пользователь может создать несколько категорий, и каждая категория доступна только пользователю, который ее создал, у вас есть связь «один ко многим». В этой ситуации кажется, что ваш вариант 1 - это то, что вы хотите. Сохраните идентификатор пользователя в категории, а затем сделайте запрос ко всем категориям, которые имеют искомый идентификатор пользователя.

Редактировать:

Если возможно, я бы порекомендовал вы ограничиваете категории, которые видит пользователь при создании задачи, только категориями, созданными этим пользователем. Если это невозможно, вы можете сделать один запрос, чтобы получить все категории из списка идентификаторов категорий, отправленных на сервер, и l oop с помощью проверки результатов, если идентификаторы пользователей совпадают.

Category.find({
    'id': { $in: [
        mongoose.Types.ObjectId('4ed3ede8844f0f351100000c'),
        mongoose.Types.ObjectId('4ed3f117a844e0471100000d'), 
        mongoose.Types.ObjectId('4ed3f18132f50c491100000e')
    ]}
}, function(err, docs){
    docs.forEach(item => {
        return item.userId === userId; //compare to userId that sent the request
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...