14

今後の MongoDB 2.4 では全文検索がサポートされます。

次のようなコマンドを使用して、mongo シェルでこれを行います。

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

これを pymongo に移植するとき、pymongoクラスrunCommandで定義されていないという事実に対処する必要があります。実際のCollectionコマンドが何であるかを理解できたので、これはシェルで機能しました:

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})

もちろん、「no such cmd: project」で失敗します。

たとえば、 and のみを使用するsearchと、物事を機能させることができますlimit

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

しかし、私はピモンゴfilterと一緒に使いたいです。projectプロジェクトとフィルターを使用して全文検索を行った人はいますか?

余談ですが、シェル コマンドから pymongo コマンドの形を推測する良い方法があるのではないでしょうか?

4

2 に答える 2

12

考え出した: pymongo は追加のコマンド引数にキーワード引数を使用します:

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

「no such cmd: project」という奇妙なエラー メッセージの理由は、Python の辞書が順不同であり、projectキーが mongo に渡されたときにたまたま最初にあったためです。

于 2013-03-09T08:02:06.480 に答える
0

別の解決策は、OrderedDict を使用することです。コレクションとクエリが変数として与えられ、制限、射影などの追加のパラメーターが dict 'params' で与えられると仮定します。

params_ord = OrderedDict()
params_ord['text'] = collection
params_ord['search'] = query
for k,v in params.iteritems():
    params_ord[k] = v
db.command(params_ord)
于 2014-09-26T22:47:10.043 に答える