【问题标题】:MGO : Can't canonicalize query: BadValue unknown operator: $metaMGO:无法规范化查询:BadValue 未知运算符:$meta
【发布时间】:2015-07-24 18:33:36
【问题描述】:

我正在使用 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 结构: MongoDB - Can't canonicalize query: BadValue unknown operator: $meta

谢谢

【问题讨论】:

    标签: mongodb go mongodb-query mgo


    【解决方案1】:

    这里的问题是您使用 BSON“地图”作为参数,而“投影”作为“查询”的一部分。而是在链接中使用.Select() 方法进行投影:

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

    就像在标准 API 示例中一样,“查询”和“投影”部分彼此“分开”。

    【讨论】:

    • @GuillaumeP 与标准 MongoDB .find() API 实现不同,“投影”与 mgo 分开。这是一个容易犯的错误。但第一个提示应该是“地图”,而不是参考 API 的“列表”。
    猜你喜欢
    • 2014-07-01
    • 2014-11-11
    • 2015-01-01
    • 2015-03-16
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    相关资源
    最近更新 更多