如何从MongoDB中的两个集合中加入数据?

时间:2015-05-11 14:10:15

标签: javascript mongodb express mongoose

我在MEAN.js样板上开发了一些应用程序,我遇到了一个我自己无法解决的问题:( 我有一个以下数据库方案:

var UserSchema = new Schema({
    profession: {
        type: Schema.ObjectId,
        ref: 'Profession'
    },
    game: {
        type: Schema.ObjectId,
        ref: 'Game'
    }
};

var ProfessionSchema = new Schema({
    assignedTaskCategories: [{
        type: Schema.ObjectId,
        ref: 'TaskCategory'
    }]
});

var TaskCategorySchema = new Schema({
    professions: [{
        type: Schema.ObjectId,
        ref: 'Profession'
    }],
    assignedToGame: {
        type: Schema.ObjectId,
        ref: 'Game'
    }
});

var TaskSchema = new Schema({
    game: {
        type: Schema.ObjectId,
        ref: 'Game'
    },
    inCategories: [{
        type: Schema.ObjectId,
        ref: 'TaskCategory'
    }]
});

现在我想获得所有任务,其中inCategories中的某些元素与User的职业taskCategories数组相同。 我试过了,但它没有返回任何内容

Profession.find({ _id: req.user.profession }).exec(function(err, userCategories) {
        if(err) {
            return res.status(400).send({
                message: errorHandler.getErrorMessage(err)
            });
        } else {
            Task.find({ game: req.user.game, inCategories: userCategories.assignedTaskCategories}).exec(function(err, tasks) {
                if(err) {
                    return res.status(400).sed({
                        message: errorHandler.getErrorMessage(err)
                    });
                } else {
                    res.json(tasks);
                }
            });
        }
    });

有人可以帮我吗? :)如果我的方法不好,请告诉我如何解决它的正确方法:)

修改

我们不能使用$ setEquals,因为数组不相同,请考虑以下示例:

专业程序员能够解决以下任务类别: 编程,演示,洗碗

专业秘书能够解决以下任务类别: 演示,洗碗

然后我们将创建一个分配给类别的任务:洗碗,因此职业assignedCategories数组更大,不等于任务的inCategories数组。< / p>

0 个答案:

没有答案