スラッグまたはIDのいずれかでクエリできるマングースクエリを作成しようとしていますが、これをExpressルートとして持っているため、どちらを処理するかわからないという問題があります。
app.get('/animals/dogs/:id', function (req, res, next) {
Dogs.find({$or: [{slug: id}, {_id: id}]}, function (err, docs) {
if (err) {
return next(err);
}
// ....
});
});
どちらでも検索できるようにしたいのですが、上記のこのアプローチではInvalid ObjectId
エラーが発生します。
別のアプローチは、クエリをネストすることですが、これは少し面倒です。
app.get('/animals/dogs/:id', function (req, res, next) {
Dogs.find({slug: id}, function (err, docs) {
if (err) {
return next(err);
}
if (!docs) {
Dogs.findById(id, function (err, docs) {
// ...
});
}
// ....
});
});
私が考慮していない他のアプローチはありますか?slug を ObjectId に変換できることはわかっていますが、できればこれは避けたいと思います。