クエリ文字列を使用してユーザー リポジトリを検索したいと考えています。
これにより、同様のユーザー名「kyogron」と同様の電子メール「kyogron@gmail」を持つすべてのユーザーが返されます。
GET localhost:3000/users?username=kyogron&email=kyogron@gmail.com
これにより、すべてのユーザーが返されます。
GET localhost:3000/users
すでにルーティング パラメータを処理できましたが、最適化に行き詰まっています。
app.get('/users', function(req, res) {
// creates a mongoosejs query object
var query = User.find({});
// to understand how expressjs handles queries:
// ?username=kyogron&email=kyogron@gmail.com
// { username: "kyogron", email: "kyogron@gmail.com" }
//console.log(req.query);
// this was one idea of optimizing the search query parameters
// this doesn't work don't know why I always get an array of ALL users
// even the key and value is right
Object.keys(req.query).forEach(function(key) {
query.select(key, req.query[key]);
});
// this was the way I was first handling the parameters, this works !!
//if (req.query.username) query.where('username', req.query.username);
//if (req.query.email) query.where('email', req.query.email);
// the rest of the query
query.select('username', 'email');
query.exec(function(err, users) {
if (err) throw err;
res.json(users);
});
});
これらは私が戦っている問題です:
- req.query オブジェクトの繰り返しが機能しないのはなぜですか?
- マングースにワイルドカードを使うにはどうすればいいですか (例: kyo*)
誰かが私を助けてくれるといいですね:)
よろしく
編集:
2 番目の問題は $where で解決できます。
if (req.query.username) {
query.$where(function() {
return this.username === req.query.username; // here we need a regex check
});
}
それはうまくいきません...誰かが私にヒントを与えることができますか?
EDIT2:
$whereで何も管理していませんでした...しかし、私は今見つけました
query.where('username').regex();
同様の単語を探す検索正規表現を探すだけです
EDIT3:
私はこのスレッドを見つけました: "like" で MongoDB を照会する方法は? mongoosejsグループで、mongooseでこれを行う方法を尋ねます
EDIT4:
if (req.query.username) {
query.where('username').regex(new RegExp("\/"+req.query.username+"\/"));
}
私はほとんどそれを手に入れました。このばかげた正規表現を修正する必要があります...