即将推出的 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: 项目”。
如果我只使用 search
和 limit
,例如,我可以让事情正常工作
db.command({
"text": "players",
"search": "alice",
"limit": 10})
但我想将 filter
和 project
与 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/