mongodb - Pymongo 中的全文搜索

标签 mongodb pymongo

即将推出的 MongoDB 2.4 支持 full-text search .

我们在 mongo shell 中用一个命令来做这个,比如

db.players.runCommand("text", {
    "search": "alice", 
    "project": {"name": 1, "_id": 0}, 
    "limit": 10})

现在,当将其移植到 pymongo 时,我们必须处理 runCommand 未在 pymongo Collection 类上定义的事实。我能够弄清楚 real 命令是什么,所以这在 shell 中起作用:

db.runCommand({
    "text": "players", 
    "search": "alice", 
    "project": {"name": 1, "_id": 0}, 
    "limit": 10})

这很有效。但这并不能完全告诉我如何让它在 pymongo 中工作。我试过了:

db.command({
    "text":"players", 
    "pipeline": [
        ("search","alice"), ("project",{"name":1,"_id":0}), ("limit",10)
    ]})

这不起作用(它说“没有指定搜索”)。我也试过了:

db.command({
    "text": "players", 
    "search": "alice", 
    "project": {"name": 1, "_id": 0}, 
    "limit":10})

当然失败了:“没有这样的 cmd: 项目”。

如果我只使用 searchlimit,例如,我可以让事情正常工作

db.command({
    "text": "players", 
    "search": "alice",
    "limit": 10})

但我想将 filterproject 与 pymongo 一起使用。有没有人使用项目和过滤器进行全文搜索?

顺便说一句:也许有一种从 shell 命令推断 pymongo 命令形状的好方法?

最佳答案

想通了:pymongo 使用关键字参数作为附加命令参数:

db.command("text", "players", 
    search="alice", 
    project={"name": 1, "_id": 0}, 
    limit=10)

出现奇怪的错误信息“no such cmd: project”的原因是 Python 的字典是无序的,而 project 键在传递给 mongo 时恰好是第一个。

关于mongodb - Pymongo 中的全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15257146/

相关文章:

mongodb - 不允许 mongodump 3.2.1 位置参数

ruby-on-rails - Rails 4/设计/MongoDB : "Unpermitted parameters" using custom properties and strong parameters

python - pymongo 问题 : TypeError: document must be an instance of dict, bson.son.SON

python - MongoDB查找获取引用的对象id和引用建议

python - pymongo - 无法连接到在 EC2 上运行的 mongodb

node.js - 使用 mongoose api 和 nodejs 搜索数据库?

mongodb - 如何在mongo中有效地通过查询删除文档?

mongodb - 过滤集合但按内部属性排序

python - 如何使用 Pymongo 将两个字段的值传递到函数中?

python - MongoDB:如何从 API 获取 db.stats()