在Pymongo的全文搜索

Ray*_*oal 13 mongodb pymongo

即将推出的MongoDB 2.4支持全文搜索.

我们在mongo shell中使用命令执行此操作,例如

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

现在把它移植到pymongo时,我们必须处理runCommandpymongo Collection类没有定义的事实.我能够弄清楚真正的命令是什么,所以这在shell中起作用:

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

哪个有效.但这并没有告诉我如何在pymongo中使用它.我试过了:

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

哪个不起作用(它说"没有指定搜索").我也尝试过:

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

这当然失败了:"没有这样的cmd:项目".

如果我只使用searchlimit,我可以让事情发挥作用

db.command({
    "text": "players", 
    "search": "alice",
    "limit": 10})
Run Code Online (Sandbox Code Playgroud)

但我想filterprojectpymongo 一起使用.有没有人使用项目和过滤器进行全文搜索?

旁白:也许有一种很好的方法可以从shell命令推断pymongo命令的形状?

Ray*_*oal 12

弄清楚:pymongo使用关键字参数作为附加命令参数:

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

奇怪的错误消息"没有这样的cmd:project"的原因是Python的字典是无序的,并且project密钥恰好是传递给mongo时的第一个.