mongodb之MongoDB Regex忽略名称中的破折号
zhujiabin
阅读:48
2025-06-02 22:19:02
评论:0
我想通过搜索词eq来查找Place.Name:"saint germain"
我使用 go.mongodb.org/mongo-driver/mongo
集合场所看起来像:
type (
Place struct {
ID primitive.ObjectID `bson:"_id,omitempty" json:"_id"`
Name string `json:"name,omitempty" bson:"name"`
...
}
)
数据库名称看起来像:
"Saint-Germain-l'Auxerrois, Paris",
"Halles, Paris",
"Palais-Royal, Paris",
"Place-Vendôme, Paris",
"Gaillon, Paris",
"Vivienne, Paris",
"Mail, Paris",
"Bonne-Nouvelle, Paris",
"Arts-et-Métiers, Paris",
"Enfants-Rouges, Paris",
"Archives, Paris",
我的mongodb Req:
query := "saint germain"
XXX.Collection("places").Find(context.Background(), bson.M{"name": primitive.Regex{Pattern: ".*" + query + ".*", Options: "i"}})
想要结果
"Saint-Germain-l'Auxerrois, Paris",
我想忽略“破折号”,如何调整“regex”,以便它可以通过“saint germain”查询找到“Saint-Germain-l'Auxerrois,Paris”
请您参考如下方法:
我想忽略“破折号”,如何调整“regex”,以便它可以通过“saint germain”查询找到“Saint-Germain-l'Auxerrois,Paris”
建议不要使用Regex来搜索,而是运行MongoDB Text Search来执行对字符串内容进行文本搜索的查询操作。
首先,您需要在集合上创建text index。请注意,一个集合只能有一个文本搜索索引,但是一个索引可以覆盖多个字段。例如:
db.places.createIndex({"name": "text"})
在您的Go代码中,您可以执行以下操作:
collection := client.Database("databaseName").Collection("places")
query := bson.M{"$text": bson.M{"$search": "saint germain"}}
cursor, err := collection.Find(context.Background(), query)
另外,如果您的群集位于 MongoDB Atlas中,并且您正在寻找细粒度的文本索引以获取更高级的搜索功能,请参见 MongoDB Atlas: Full Text Search。
全文搜索使用户可以利用 Apache Lucene的功能进行文本搜索。例如:
collection := client.Database("databaseName").Collection("places")
location := "saint germain"
pipeline := mongo.Pipeline{
{{"$searchBeta", bson.D{
{"search", bson.D{
{"query", location},
{"path", "name"}},
}},
}},
}
cursor, err := collection.Aggregate(context.Background(), pipeline)
上面的代码片段将返回类似的结果
name: "Saint-Germain-l'Auxerrois, Paris"。这些片段是使用
mongo-go-driver v1.2.x和MongoDB v4.2.x编写的。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



