REST サーバーの GET 出力で特定のフィールドを非表示にしようとしています。私は 2 つのスキーマを持っていますが、どちらも相互に関連するデータを GET に埋め込むためのフィールドを持っているため、/people を取得すると、彼らが働いている場所のリストが返され、場所のリストを取得するとそこで働く人が返されます。ただし、これを行うと、 person.locations.employees フィールドが追加され、従業員が再び一覧表示されます。これは明らかに望ましくありません。では、表示する前にそのフィールドを出力から削除するにはどうすればよいでしょうか? ありがとうございます。さらに情報が必要な場合はお知らせください。
/********************
/ GET :endpoint
********************/
app.get('/:endpoint', function (req, res) {
var endpoint = req.params.endpoint;
// Select model based on endpoint, otherwise throw err
if( endpoint == 'people' ){
model = PeopleModel.find().populate('locations');
} else if( endpoint == 'locations' ){
model = LocationsModel.find().populate('employees');
} else {
return res.send(404, { erorr: "That resource doesn't exist" });
}
// Display the results
return model.exec(function (err, obj) {
if (!err) {
return res.send(obj);
} else {
return res.send(err);
}
});
});
これが私のGETロジックです。そのため、populate 関数の後に mongoose でクエリ関数を使用して、それらの参照を除外しようとしました。これが私の2つのスキーマです。
peopleSchema.js
return new Schema({
first_name: String,
last_name: String,
address: {},
image: String,
job_title: String,
created_at: { type: Date, default: Date.now },
active_until: { type: Date, default: null },
hourly_wage: Number,
locations: [{ type: Schema.ObjectId, ref: 'Locations' }],
employee_number: Number
}, { collection: 'people' });
locationSchema.js
return new Schema({
title: String,
address: {},
current_manager: String, // Inherit person details
alternate_contact: String, // Inherit person details
hours: {},
employees: [{ type: Schema.ObjectId, ref: 'People' }], // mixin employees that work at this location
created_at: { type: Date, default: Date.now },
active_until: { type: Date, default: null }
}, { collection: 'locations' });