我想写这个查询db.station.find({$and:[ {available:true}, { $text: {$search: "Romania SunFolk Radio"}}]}, {score: {$meta: "textScore"}}).sort({score:{$meta:"textScore"}})我写了filter := bson.D{ {"$and", bson.A{ bson.M{"available": true}, bson.M{"$text": bson.M{ "$search": query, }}, }}, {"score", bson.M{"$meta": "textScore"}},}opts := options.Find()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)}但此代码返回错误 (BadValue) 未知运算符:$meta。如何正确编写此查询?
1 回答
杨魅力
TA贡献1811条经验 获得超6个赞
运算符是投影运算符,而不是筛选器运算符(请参阅文档)。您正在将其传递到筛选器。这实际上是您在评论中已经指出的问题的答案。如果您只需要根据textScore进行排序,则可以像这样进行。$meta
filter := bson.D{
{"$and", bson.A{
bson.M{"available": true},
bson.M{"$text": bson.M{
"$search": query,
}},
}},
}
opts := options.Find()
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)
}
- 1 回答
- 0 关注
- 112 浏览
添加回答
举报
0/150
提交
取消