为了账号安全,请及时绑定邮箱和手机立即绑定

mongo-driver: 未知运算符: $meta

mongo-driver: 未知运算符: $meta

Go
慕仙森 2022-09-05 17:42:04
我想写这个查询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)

}


查看完整回答
反对 回复 2022-09-05
  • 1 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信