2017-05-15 11 views
0

私はMongoDBでユーザー名かIDのどちらかで(Mongooseを使って)ユーザーを見つけることができます。Mongooseで2つの別々のデータ型で検索する

キャストのObjectIdにモデル\ "ユーザ\"」

ための\ "_のid \" パスで "ユーザー名\" \値に失敗しました:使用

:私はそれが文字列が通過するときUser.find({ $or: [ { _id: req.params.userId }, { username: req.params.userId } ]}, ...でエラーが発生します

私はエラーを取得していますなぜ私は理解しますが、その周りに簡単な方法がある

答えて

1

テストreq.params.userIdは、それに基づいてクエリを組み立て、有効なObjectIdですか?

let query = {}; 
if (req.params.userId.match(/^[0-9a-fA-F]{24}$/)) { 
    query._id = req.params.userId; 
} 
else { 
    query.username = req.params.userId; 
} 
User.find(query, ...); 
+0

ご回答ありがとうございます。私は 'mongoose.Types.ObjectId.isValid'を使うことができますが、より洗練された単一行の方法が望まれていました!あなたの答えを受け入れるでしょう:) – Damien

+1

@Damienありがとう。その 'isValid'メソッドの使用はお勧めしません。なぜなら、それは12文字の文字列を有効とみなすという奇妙な振る舞いをしているからです。 – JohnnyHK

+0

お役立ち情報ありがとう。 – Damien

関連する問題