Отношение схемы MongooseJS - PullRequest
       0

Отношение схемы MongooseJS

3 голосов
/ 05 января 2012

У меня есть схема MongooseJS, как указано ниже:

var UserSchema = new Schema({
    name            : String,
    app_key         : String,
    app_secret      : String,
    tasks           : [{ type   : Schema.ObjectId, 
                            ref : 'Task'}]
})

var ActionSchema = new Schema({
    name            : String,
    description     : String,
    module          : String
})

var enumTaskState = ['New', 'Indexing', 'Idle', 'In Queue', 'Working'];
var TaskSchema = new Schema({
    name            : String,
    lastPerformed   : Date,
    folder          : String,
    actions         : [{type    : Schema.ObjectId, 
                        ref     : 'Task'}],
    user            : { type    : Schema.ObjectId, 
                        ref     : 'User'},
    status          : { type    : String,
                        enum    : enumTaskState,
                        default : 'New'}
})

Проблема в том, что, когда я задаю пользователя задачи, должен ли я вручную переходить к пользователю и добавлять туда задачу тоже?Это похоже на дополнительную работу (избыточность), есть ли в mongoosejs опция, которая позволит мне указать отношения, с которыми она будет обрабатывать все сама?Спасибо.

Ответы [ 2 ]

6 голосов
/ 05 января 2012

MongoDB - это не реляционная база данных, это база данных на основе документов.

Вы можете получить список задач пользователя, запросив TaskSchema и выполнив поиск нужного пользователя.Просто добавьте индекс, чтобы он был быстрым запросом:

user: {type: Schema.ObjectId, ref: 'User', index: true}
4 голосов
/ 05 января 2012

Чтобы уточнить ответ emostar:

Вы пытаетесь использовать MongoDB как реляционную базу данных.Вы даете пользователям список задач, но каждая задача ссылается на пользователя.В типичной схеме MongoDB вы должны выяснить, как вы хотите использовать модели в своем приложении, и просто внедрить документы там, где это имеет смысл (например, если Users содержит массив задач, нет необходимости в задаче, чтобы иметь ссылкуего владельцу - просто посмотрите на пользователя, которому принадлежит коллекция).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...