Go mongo-driver执行全文检索报错Unknown operator: $meta正确写法咨询
问题原因
你出现报错的核心是混淆了MongoDB find方法的过滤条件参数和投影参数:
原生Mongo Shell的find方法第一个入参是查询过滤规则,第二个入参是控制返回字段的投影配置,你把返回得分的score: {$meta: "textScore"}投影配置写到了Go代码的过滤条件中,导致MongoDB把这段逻辑当成查询条件解析,识别不到该场景下的$meta操作符。
修正后的代码
// 过滤条件仅保留查询规则,不要写入投影配置 filter := bson.D{ {"$and", bson.A{ bson.M{"available": true}, bson.M{"$text": bson.M{ "$search": query, }}, }}, } opts := options.Find() // 投影配置通过SetProjection方法单独设置 opts.SetProjection(bson.M{ "score": bson.M{"$meta": "textScore"}, }) // 排序和分页逻辑保持不变 opts.SetSort(bson.M{"score": bson.M{"$meta": "textScore"}}) opts.SetLimit(1) cursor, err := s.collection.Find(ctx, filter, opts) if err != nil { log.Println(err) }
额外注意事项
请提前确认station集合已经针对要搜索的字段创建了文本索引,否则$text查询会直接报错。
内容的提问来源于stack exchange,提问作者Kitsor
相关产品推荐
相关产品推荐

