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

您的错误是传递非整数 as 的结果cache_for,它告诉pymongo缓存索引存在的事实多长时间。

我不知道你的代码是什么psuedoor in ,但是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() ,它应该是该索引的字段列表作为第一个参数,以及第二个参数的任何额外选项(如稀疏)。管理员不需要做任何工作来保持这个索引的完整性,好吧,不是每月一次,但如果集群中出现故障,那么是的,管理员可能需要做一些工作来重新制作索引。我个人有一个每次加载我的应用程序时都会调用的索引文件。我希望这能把事情弄清楚一点,

来自Google 群组的回答

于 2012-09-23T09:28:11.440 回答