2017-03-18 4 views
0

私は2つのモデルを持っています。 1つはユーザー、もう1つはStudyGroupです。各StudyGroupには、一意の​​フィールドがあります。 ユーザモデルには、文字列の配列であるstudyGroupsのフィールドがあります。​​ユーザーは複数のスタディグループに参加できます。私は、配列内に格納された文字列​​を使用してユーザーモデルのstudyGroupアレイ内のすべてのstudyGroupsを見つけたい不要な空の配列を返すモンゴース集約

ユーザーモデル

const userSchema = new Schema({ 
    cuid: { type: 'String', required: true }, 
    firstName: { type: 'String', required: true }, 
    lastName: { type: 'String', required: true }, 
    studentId: { type: 'Number', required: true }, 
    password: { type: 'String', required: true }, 
    email: { type: 'String', required: true }, 
    dateAdded: { type: 'Date', default: Date.now, required: true }, 
    lastLogin: { type: 'Date', default: null, required: false }, 
    studyGroups: [{ type: 'String' }], 
}); 

StudyGroupモデル

const studyGroupSchema = new Schema({ 
    guid: { type: 'String', required: true }, 
    groupName: { type: 'String', required: true }, 
    course: { type: 'String', required: true }, 
    teacher: { type: 'String', required: true }, 
    description: { type: 'String', required: true }, 
    dateAdded: { type: 'Date', default: Date.now, required: true }, 
    chatMessages: [{ type: 'String' }], 
}); 

。その後、対応するstudyGroupオブジェクトをフロントエンドに送信します。

export function getUserStudyGroups(req, res) { 
    User.aggregate([ 
    { "$unwind": "$studyGroups" }, 
    { 
     "$lookup": { 
     "from": "studyGroups", 
     "localField": "studyGroups", 
     "foreignField": "cuid", 
     "as": "resultingStudyGroupsArray" 
     } 
    }, 
    { "$unwind": "$resultingStudyGroupsArray" }, 
    { 
     "$group": { 
     "_id": null, 
     "myStudyGroups": { "$addToSet": "$resultingStudyGroupsArray" }, 
     "count": { "$sum": 1 } 
     } 
    } 
    ]).exec(function(err, results){ 
    console.log(results); 
    return res.json({ studyGroups: results }); 
    }); 
} 

しかし、上のコードは私に空の配列を返します。しかし、私は一連のstudyGroupオブジェクトを返したいと思います。

+1

'を返します。それは何ですか? –

+0

woops、私はそれを忘れてしまった。それが問題かどうか私に見てみましょう。 – pbgnz

+0

'resultsTagsArray'を' resultsStudyGroupsArray'に変更した後でもまだ空の配列です – pbgnz

答えて

0

foreignFieldは、​​である必要があります。

export function getUserStudyGroups(req, res) { User.aggregate([ 
    { "$unwind": "$studyGroups" }, 
    { 
     "$lookup": { 
     "from": "studyGroups", 
     "localField": "studyGroups", 
     "foreignField": "guid", 
     "as": "resultingStudyGroupsArray" 
     } 
    }, 
    { "$unwind": "$resultingStudyGroupsArray" }, 
    { 
     "$group": { 
     "_id": null, 
     "myStudyGroups": { "$addToSet": "$resultingStudyGroupsArray" }, 
     "count": { "$sum": 1 } 
     } 
    } ]).exec(function(err, results){ 
    console.log(results); 
    return res.json({ studyGroups: results }); }); } 
0

私は集計を使用せずにユーザーモデルからすべての​​年代をフェッチするために管理。

export function getUserStudyGroups(req, res) { 
    User.findOne({ cuid: req.params.cuid }).select('studyGroups').exec((err, studyGroups) => { 
    if (err) { 
     return res.status(500).send(err); 
    } 
    console.log(studyGroups) 
    StudyGroup.find({ guid: {$in: studyGroups.studyGroups }}).exec((err, foundGroups) => { 
     if (err) { 
     return res.status(500).send(err); 
     } 
     return res.json({ myGroups: foundGroups }); 
     }); 
    }); 
} 

ユーザーとStudyGroupはその従ったモデルを指し、そしてstudyGroups.studyGroupsは、文字列の配列(​​年代)あなたはどこでもタグ配列を結果として作成されていないresultingTagsArray`