2017-04-09 4 views
0

返されたアイテムだけをIDと一致させたいマングースモデルを作成しようとしています。マングース、IDがプロジェクト参照に固有の場所に移入します

更新の編集:以下のユーザーモデルでは、idで正しいユーザーを見つけてから、taskプロパティの場合は、projectIDreq.params.IDに一致する場所に入力する必要があります。 projectIDreq.params.IDに一致するタスクのみを取り込む方法はありますか。私は私の完全なユーザー・モデルと同様に、タスクモデル

//ユーザーのスキーマ

var UserSchema = new Schema({ 
    name: { 
    type: String, 
    trim: true, 
    required: "First Name is Required" 
    }, 
    username: { 
    type: String, 
    trim: true, 
    required: "Username is Required" 
    }, 
    skills: { 
    type: String, 
    trim : true 
    }, 
    avatar: { 
    type: String 
    }, 
    SQLid: { 
    type: Number 
    }, 
    userCreated: { 
    type: Date, 
    default: Date.now 
    }, 
    lastUpdated: { 
    type: Date 
    }, 
    adminTeams: [{ 
    type: Schema.Types.ObjectId, 
    ref: "Team" 
    }], 
    team: [{ 
    type: Schema.Types.ObjectId, 
    ref: "Team" 
    }], 
    task: [{ 
    projectID: { 
     type: String 
    }, 
    theTask: { 
     type: Schema.Types.ObjectId, 
     ref: "Task" 
    } 
    }] 
}); 

//タスクスキーマ私だけtaskが読み込まれますすることができますどのように

var TodoSchema = new Schema({ 
    task: { 
    type: String 
    } 
}); 

PROJECTIDが含まれています特定のIDと等しいです。試しました

User.findById({ "_id": req.params.id }).populate({ path: 'task', match: {projectID: req.params.pID}, select: 'theTask' }) 
    .exec(function(err, docs){ 
    console.log("POPULATE TASKS DOCS", docs) 

これはドキュメントが空であることを示しています。

答えて

0

$elemMatchを使用すると、projectIdと一致するすべてのドキュメントが表示され、タスクドキュメントが作成されます。 だから、クエリは次のようになります -

var query={ 
      task:{ 
        $elemMatch:{ 
          projectId: req.params.id 
           } 
        } 
      } 

User.find(query) 
.populate('theTask') 
.select('theTask') // use for getting selective data from document 
.exec(function(){}) //your callback fuction 

私はあなたの質問に答える希望。

ありがとうございました。

+0

文書全体を取得するためにrefrence IDが必要ですタスクの_idを返し、実際のタスクの代わりにproejectを返します。私は完全なユーザーモデルとタスクモデルを含んでいます – henhen

0

あなたのタスクschmaでは、タスクタイプのタイプをstringとし、ユーザースキーマでは、タスクとタスクのrefrenceを持っています。自分自身はstringです。それが移入されていないthatsの理由..

だから、(それをシンプルに保つ)にタスクのスキーマを変更 -

var Task= new Schema({ 
    name :string 
    }); 

移入は、私はこれを試してみたが、それ

関連する問題