MGO: не удается канонизировать запрос: BadValue неизвестный оператор: $meta

Я использую MGO для связи с mongodb. Я хочу выполнить поиск в коллекции и отсортировать результаты по результатам поиска.

collection.Find(bson.M{
    "$text": bson.M{"$search": "mysearch"},
    "score": bson.M{"$meta": "textScore"},
})

Но я получаю эту ошибку:

Can't canonicalize query: BadValue unknown operator: $meta (status code : 500)

Когда я пытаюсь использовать только $text, это работает.

Я использую ту же структуру bson, что и здесь: не канонизировать запрос: BadValue неизвестный оператор: $meta

Спасибо


person GuillaumeP    schedule 24.07.2015    source источник


Ответы (1)


Проблема здесь в том, что вы используете «карту» BSON в качестве аргумента с «проекцией» как часть «запроса». Вместо этого используйте метод .Select() в цепочке для проекции:

collection.Find(
    bson.M{ "$text": bson.M{ "$search": "mysearch" } }
).Select( 
    bson.M{ "score": bson.M{ "$meta": "textScore" } }
)

Как и в стандартных примерах API, части «запрос» и «проекция» «отделены» друг от друга.

person Blakes Seven    schedule 24.07.2015
comment
@GuillaumeP В отличие от стандартной реализации MongoDB .find() API, проекция отделена от mgo. Легко сделать ошибку. Но первая подсказка должна быть картой, а не списком, как это делает эталонный API. - person Blakes Seven; 24.07.2015