PyMongo使用元数据排序

时间:2014-05-15 22:18:55

标签: python mongodb pymongo mongodb-query

我想知道如何将跟随mongodb查询转换为pymongo语法

db.articles.find(
   { $text: { $search: "cake" } },
   { score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } ).limit(3)

我试过了:

results = \
    mongo.db.products.find({ '$text': { '$search': 'cake' } }, { 'score': { '$meta': 'textScore' } }) \
        .sort({ 'score': { '$meta': 'textScore' } }) \
        .limit(3)

但是我在sort上遇到了以下错误:

raise TypeError("second item in each key pair must be 1, -1, "
TypeError: second item in each key pair must be 1, -1, '2d', 'geoHaystack', or another valid MongoDB index specifier.

任何人都可以帮助我吗? 提前致谢

2 个答案:

答案 0 :(得分:5)

我认为解决方案就在这里:https://github.com/mongodb/mongo-python-driver/blob/master/pymongo/cursor.py#L658。使用" new"添加新方法的(键,方向)列表功能' $ text':

    Beginning with MongoDB version 2.6, text search results can be
    sorted by relevance::

        cursor = db.test.find(
            {'$text': {'$search': 'some words'}},
            {'score': {'$meta': 'textScore'}})

        # Sort by 'score' field.
        cursor.sort([('score', {'$meta': 'textScore'})]) #<<<< HERE

答案 1 :(得分:0)

我将pymongo升级到最新版本,并且有效。