0

本番コードにインデックスを追加するにはどうすればよいですか?私はそれをコマンドとして追加する方法だけを見つけ、完全なコードに埋め込まれていません:

クエリを高速化するためにインデックスを追加する場合:

db.users.ensure_index(the_key)

だから私はそれをクラスに追加しようとしました:

class Registration(BaseHandler):
    def post(self):
        # do stuff to get user information using the self.get_argument()
        user={"all information":informations}
        self.db.users.insert(user, w=1)
        self.db.users.ensure_index(pseudo, commune)

しかし、次のようなエラーが発生します。

self.db.users.ensure_index(pseudo, commune)
      File "build\bdist.win-amd64\egg\pymongo\collection.py", line 829, in ensure_index
      return self.create_index(key_or_list, cache_for, **kwargs)
  File "build\bdist.win-amd64\egg\pymongo\collection.py", line 740, in create_index
    self.__name, name, cache_for)
  File "build\bdist.win-amd64\egg\pymongo\connection.py", line 330, in _cache_index
    expire = datetime.timedelta(seconds=cache_for) + now
TypeError: unsupported type for timedelta seconds component: unicode

また、サブドキュメントの挿入を使用する場合も同じヒントになると思います。

self.db.users.update({"email":email}, {"$push":{"produit_up":{"id":id, "namep":namep, "nombre":nombre}}})
self.db.users.ensure_index("product_up.namep") #????
4

2 に答える 2

2

エラーは、非整数をとして渡した結果です。cache_forこれはpymongo、インデックスが存在するという事実をキャッシュする期間を示します。

psuedoあなたのコードが何であるかはわかりませんが、 incommuneの正しい使用法はです。これについてはpymongoのドキュメントで詳しく読むことができますが、その要点は、キーに名前を付ける文字列(はい、これには、表示した方法でサブドキュメントを含めることができます)または(キー、方向)を含むタプルのリストのいずれかです。方向がまたはであるペア。ensure_indexpymongoensure_index(key_or_list, cache_for=300, **kwargs)key_or_listpymongo.ASCENDINGpymongo.DESCENDING

于 2012-09-23T08:47:26.613 に答える
-1

答えを得た:

いいえいいえ、ensureIndexはインデックスの作成と同じです。特別なことは何もしません。関数の名前が少し変わっているので、代わりにcreate_indexと呼ぶ必要があります。Mongoには事前定義されたスキーマ(NoSQL)がないため、SQLとは異なる方法でインデックスを作成する必要があります。提案された方法は、ユーザーが特定のフィールドにインデックスが必要であると判断したときにクライアント側を経由することでした。これは、コレクションがクライアントによって使用されるときに、コレクションが作成される方法と作成されない方法です。この関数はensureIndex()と呼ばれていました。したがって、アプリ内でensureIndex()を実行するために必要な呼び出しは1つだけであり、最初のパラメーターとしてのそのインデックスのフィールドのリストと、2番目のパラメーターの追加オプション(スパースなど)である必要があります。このインデックスをそのまま維持するために管理者が必要とする作業はありません。月に1回ではありませんが、クラスターで問題が発生した場合は、管理者がインデックスを再作成するために何らかの作業が必要になります。私は個人的に、アプリが読み込まれるたびに呼び出すインデックスのファイルを持っています。これで少しクリアになるといいのですが、

Googleグループからの回答

于 2012-09-23T09:28:11.440 に答える