[英]How to join data from two collections in MongoDB?
我正在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
與用戶的行業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
陣列。
嘗試在使用$setEquals
運算符比較數組的地方使用聚合框架 。 在下面的管道時,操作者確定是否任務inCategories
陣列和assignedTaskCategories
陣列包含相同的元素:
Profession.find({ _id: req.user.profession }).exec(function(err, userCategories) {
if(err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
var pipeline = [
{
"$match": { "game": req.user.game }
},
{
"$project": {
"game": 1,
"inCategories": 1,
"sameElements": {
"$setEquals": [ "$inCategories", userCategories[0].assignedTaskCategories ]
}
}
},
{
"$match": { "sameElements": true }
}
];
Task.aggregate(pipeline)
.exec(function (err, tasks){
if(err) {
return res.status(400).sed({
message: errorHandler.getErrorMessage(err)
});
} else {
res.json(tasks);
}
});
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.