0
文字列を入力として(ユーザー検索から)、mgo
のbson.M
オブジェクトを作成して、mongoデータベースを検索し、x個の項目を検索しようとしています。Golang mgoでユーザーを検索
私は検索がに基づいてする必要がどのようなこの
func Search (w http.ResponseWriter, r *http.Request) {
q := r.FormValue("q")
filter := bson.M{}
// magic happens here
// do db connection stuff
things := []*thing{}
err := db.Find(&filter).Limit(10).All(&things)
// check error, send things, etc
}
のようなものは
- は、ケース(私は私の道の一部をとりthis answerを発見した)
title
では無視されます記憶されたデータは、どこかに、q
の各単語を含まなければならない。
Abc
はde Bc
が一致すると一致しますので、格納されたデータは、その後、{title: "abcde"}
のように見える場合、たとえばac
一致しません
編集:ソリューション
私はついにそれを理解しました。魔法の部分は次のようになります。
q := r.FormValue("q")
qs := strings.Split(q, " ")
and := make([]bson.M, len(qs))
for i, q := range qs {
and[i] = bson.M{"title": bson.M{
"$regex": bson.RegEx{Pattern: ".*" + q + ".*", Options: "i"},
}}
}
filter := bson.M{"$and": and}
ありがとうございます! - 'Pattern:title'?あなたは 'パターン:q'を意味しますか?そして 'q 'が複数の単語で構成されている場合、どうやってやるのか分かりますか? –
はい、しかし、関連する正規表現を追加する必要があります。あなたがNoSqlインジェクションスタイルの攻撃にさらされていないことを確認するために、エスケープ/入力の検証をお勧めします。 – Steve101
複数の単語について私はあなたが文字列分割のいくつかの並べ替えを行うことができますし、正規表現をチェーンする$とキーワードを使用して想像するだろう。 (https://docs.mongodb.com/manual/reference/operator/query/and/) – Steve101