猿问

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

我想写这个查询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。如何正确编写此查询?


慕仙森
浏览 113回答 1
1回答

杨魅力

运算符是投影运算符,而不是筛选器运算符(请参阅文档)。您正在将其传递到筛选器。这实际上是您在评论中已经指出的问题的答案。如果您只需要根据textScore进行排序,则可以像这样进行。$metafilter := 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)}
随时随地看视频慕课网APP

相关分类

Go
我要回答