🦞

mongo-go-driverでLIKE検索を行う

2021/05/22に公開

概要

MongoDBでは、RDBでいうところのLIKE検索を行える機能があります。ドキュメントの$regexにある通り、regex演算子を使って正規表現を指定することで実現できます。
今回はこのregex演算子をmongo-go-driverで実装するには、どうすれば良いのかを書きます。

対応

  • MongoDBのクエリでregexを使用する場合はこちらのstackoverflowの記事にある通り、{name:{$regex: /word/ }}のような感じで、検索に使いたい正規表現をスラッシュで囲みます。
  • mongo-go-driverでは文字列で指定すれば良いのかと思いましたが、文字列ではきちんと検索できません。ではどうすれば良いかというと、Find entries via substring regex query in mongodb-go-driverの記事にある通り、primitive.Regexを使用して正規表現を指定してあげれば良いです。

実装サンプル

サンプルはAggregationのクエリで使用してみています。クエリ部分のみを記載するので、DBの接続部分等はこちらの記事を参照ください。

sample.go
・
・
// 「テスト」というワードが含まれる
matchStage := bson.D{{Key: "$match", Value: bson.D{
  {Key: "contents", Value: bson.D{{Key: "$regex", Value: primitive.Regex{Pattern: "テスト", Options: "i"}}}}}}}
// 取得項目の指定
projectStage := bson.D{{Key: "$project", Value: bson.D{
  {Key: "_id", Value: 1},
  {Key: "title", Value: 1},
  {Key: "contents", Value: 1},
  {Key: "post_date", Value: 1},
}}}
// Aggregate
cur, err := col.Aggregate(context.Background(),
  mongo.Pipeline{matchStage, projectStage})
・
・

Discussion